{"_id":"ts-toolbelt","_rev":"947-c621dd2c208c293f29b3feaa03a58622","name":"ts-toolbelt","dist-tags":{"latest":"9.6.0","next":"8.4.0","master":"3.8.76","dt":"3.8.49","test":"9.6.0-test.1615391863903","mcpower-op-arrays":"6.1.0"},"versions":{"0.0.0":{"name":"ts-toolbelt","version":"0.0.0","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":[],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/_index.d.ts","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.5.0","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.12.4","ts-node":"^8.0.3","typedoc":"^0.15.0-0","typedoc-plugin-markdown":"^1.1.27","typedoc-thunder-theme":"0.0.2","typescript":"next"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.0","_nodeVersion":"10.15.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-iNCkJktrAx1J4udMiFGy+vZ2QQMEy9iqL8F6gbjk0dG0cHOQHbJ/FMp/gZUbtFFJEPJiTqiQMhLLGGuB1wqhDA==","shasum":"543b0f9b899410af9146c87516346681b80f234b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.0.tgz","fileCount":47,"unpackedSize":242497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc6FHnCRA9TVsSAnZWagAAKcgP/iO3nT0KKQrW+MMxK2N4\nXQw1CbS/SDzODHb75dIhTGBc3+ecyRCgE7Xi6h1ng2hpQlBoJB0MwKvM1y3C\nFqnnevuyd8WYRHM3MhFsVPez8hSwn16W456AcWNWQyaF2aR0lnfiAjieJMj2\nHWIij0wrp7vuIgfnDuaRcLGgN6D3jGOESnU/7CDSDGdDE8XjTf3+SQ4UNPBE\nFGiD3LmB4LfJWxInM7V0G7QvODWpfZ1u5hfMuJLtzRgcUhnLRtWjqxgsbqK6\nVpD1D6Ktrf7KbG6xTZmRMt3ua8CnDKaYpwTcPcqfwFlIPKCsS7usRv/sMOQG\nRJ8K/VgGVwS0AEA/tND+R+ndyNp+RV4B/oeRZtfCcxDBRgtY4Ie96s7TicWP\nSpmBb/5BdrC0F0t9OhVhwajP077nxuVwjPpkJD489aVYhiqok96X7f0FLSva\n9fDzveml8yM9EDWvtXlNRVp2EOGU3BXUTeh8DyzOqDEjBxkb7NQJ/30q4Ctx\ngcwGIXtQ7xjYttNGIObuVNyINMkTm6hiLUXs6Tvwd9AWR6Y4XmaiFdFqCLAZ\nFHOj0UOnBmEe8PGhSOzlsgelHdPP5CI5+4rV1yNj3UIuB+YLKBdCvg+svrm3\nUORIubeoEW/FLjprsVYcAhipc9bvXAaAXOVspXhixOhqLVXxCnh9NN2SXtpZ\nFBsk\r\n=HH1F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJDGzr5tRKPYiUEHRzX2jT548XQB2WstBNELD7AHmYzQIgTt49V0waA+GeUCKgc3Ki1sTbe/VR/23fD8GM7SxVXZ8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.0_1558729190652_0.5557615117133552"},"_hasShrinkwrap":false},"0.0.1":{"name":"ts-toolbelt","version":"0.0.1","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.1","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6XSn+6kMp9zMz9fJwQqNKupiS+6gkDvKJ5D4SbmwHuLVSonhIhMCPM1UuO3b998MExbhAYkYDC+75FJfGuvCdw==","shasum":"96104321a224b90cb719183b0d3f5033fbefe987","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.1.tgz","fileCount":126,"unpackedSize":665652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/ES0CRA9TVsSAnZWagAAhHkQAJzEBC09nkp9HuW/OCks\nWv5xQrD+Kwkg4l/HR7ekl8xNvPj3prnglmzVG6xaahEyWUy7CnyjN0GTU074\nTsvZG3h2PpJkb/mn2/bT1RvnnD0fcHcvAOF1HJ1vGZxB+qgk+E0qzToa0kZb\nxNV7+iTml0cIUP2jy/UCdZ4s3eLMjRVTDbUYKtThsnqJYehttSq5KaqmoIAF\nJxse/R9hDqoPSktZ+O0yrYbvBGUByYTolnyb4RAw+yoCN3Q0bhkzMqzR7Yth\nk3udHULgSWnXQcOej7Rs7Lcf133PU+dusOgL6xyvNSmcsvF+fweCZM7IDC5H\nZX7eUM7Fcv/O4Kny22PRJxjGgZ6xA2+xiLi60Zdo0M7LSVGW3PslRr9tmvYa\npIvi93WFafuD2jnVhpL/Cl+f7fQfgL2WNeK6982ftql0yoqC41NVEOIQQF+F\nbqyYjFFdKrRnknTyKEqX+/aDK8gpi6tyhkuI9aVOU+qSAGGKIZ77CbePuYFZ\nvCQejeUhLsPGji+px0iEgicbXQmhpr3OGhoMbxtFpzBbKLcma3zHlbGwYRiQ\nv3FMSDGgFQHETF4GJcODAIUEDwoDqbcuWwJeJq7GI4ZIV3zBM9hmpGaAyVIY\nI5OALNj7IrA9VgcloFd+IjifYhXo3IcdbCT0MZuFYRppAPhM8h5Q2KrVI9AM\neIpO\r\n=2d+Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4e5kWE4VKhKWmG2SvtjOGkFgQuD0fPoYRKn8niyLYZAiBTfff8onC9h5ghadGnbATXgCDhkrPyI78vHZgGTKReTQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.1_1560036532102_0.9796071316989567"},"_hasShrinkwrap":false},"0.0.2":{"name":"ts-toolbelt","version":"0.0.2","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"gitHead":"f1c5d6e3a80a496ba7bf30b7c969cc202e03330a","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qyEr1MfY0vusGPkY6H5PzsgRuj2cRErtrrMSAR421SToGtZJPPdNKHHYwh0N1uC1ZDZJKrT2oO+q/dcK6w/F+A==","shasum":"2c3e13a59730571d3574918f0e1596f8190aad48","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.2.tgz","fileCount":128,"unpackedSize":666449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/EcyCRA9TVsSAnZWagAA8LoP/3bXOlUzNXkwCMR1p58F\nQJLNDqhwun+vFQrVfkoXLkrQNtLrncyPboJ2gwzhgVuCcU6TzlB5o8XpUeE+\nOCCEyCcuZYEeZFV4AQ0aOWhFQId8oBHFXTLt/XhC9ycooWeNmnV70w5Q4ZmX\nDkKbMoWP/bKr1ns5lip3+64eMdH5T9mbRz/8r2Q25zEK3QWLF7atvYe0jM85\nJTBPO2fklp1Ethy/Pw7MNnuB23OFPbkDnMmxJpnXsNsM6YWF2ELmLeUcSa7b\nK6JoJTXjG/C12YGzZiL+FJiLdXRGhfGPFVYpJ09zQMzebFnAeAnVZzjZHGUV\n+OS2IYBcTnd6FN12a7nhXPmrxYN5NkoXN0LQSxKDMHQuAS74qdL9JIbJ4nGP\ngfRSENL95bubwRDiDXWl+1QUSEi/u/iH4Rxvy1ptBXNf2Nwj7trrK8peBtJp\nAw/6JlJHF0schYjMTz+3Z3PB6qYI/M+IFWJu4SeUMLKrYbynxljpxRm0athv\nswpKKRkRMrqPcE4RmkAZqpOa3T641sYGpEGA9gsxoe7865gMBQr5RM7WufB0\nBuHGDziWVOBhTw0Gqg1jhuh3Ro8YFGZvMhczx1vRRbw0Qar7RcQcu1yTmQyV\nKXtGNjY3Pdm7KbF4vTXVAHecYXZjEkoG5uHRyHsWmEvD9g5105Bu2vcARZjx\ngKeb\r\n=isvC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrSSsYnJzW5pdspJOftBW/CXmcMdpg3V08/xrCW6HX3wIgJ0aOom3IOs3WburzfLJX0//b3bBP4WNDd18901/DH1k="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.2_1560037170000_0.5306477115318293"},"_hasShrinkwrap":false},"0.0.3":{"name":"ts-toolbelt","version":"0.0.3","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"gitHead":"f1c5d6e3a80a496ba7bf30b7c969cc202e03330a","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ESeUwEQuu4msxcoFDHMv3bR/BiygCFYqoG6cLrz9BjMdqlEdqBOphm29CR+db2A+bp0ZfbiYgjC4x90lGziBTQ==","shasum":"2b36be0221d68bb9f8a42fd4e75a148c05eece9d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.3.tgz","fileCount":130,"unpackedSize":667630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/EeHCRA9TVsSAnZWagAAL80QAIy9AP/DFDyvN7+k12i+\nNBemaXoPdUh9a4qjHo3KSCWqHddeOxrqSKeKy4kLMazBYIFt5hTEdytBkXAl\nF8fMun0LJGTWZVNaOPASNYR2Wh83JuymSeb/69HP6bzHWuA+g4LG5KA6ywa5\n5vGh4mvSy34L6tfJXQJYDtSaALQoKXDmvbG1ElAxT+09htycApSNPhyER+7Y\niv4iUG0RvsTfNjVJhznKwYMkaWMdXY4/EnJhlILik4CaUoGgdfMLxDjQYriX\nDz8C5dCTaHvTHeTi5sSAsxt3R4Er7QOSJCvKKrh+fW7/PCLmveyTpQ6JlfFo\nG7leXsZL7AS86GF/GyAAfgW1SayKds77shGXGTJtqqxChtHIRL3qj6CRlrMe\nlfGuGTRNvrroWQpTpzE9iLYnCNS+AwQex5KDlCcRDf1G8DNy4tyco4VSNm6h\npmM2fnNwVjviNNfbbXneXchVKEmY1coVgd1RwacX5+g1iI7uzIjCPz6J/laV\nSVwbFeZ0rmFatnxCL2vtesY6l10JTvB2DoPBX9xI4N+uVsvkeS+/PpXsCjbp\noKrlhFc7D6/DlQk9gdzvrr/68lfDi2oo0JpQBFciW9YREhoEhvHM1dgHb7vq\nOw4cXEQg85PFf4qx2zA/cS5IJ9QRU4rKnkPso66PdDTL+Kv81/3q0x32laUv\nO2qt\r\n=vEhH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICha04uch/kA3//ajdQEfFcGthHDHnHiDSLaxnOtyeqgAiEAoxFw1FXczg/j2be47NtOPmQswjL8FV64fbvS/lw6XQM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.3_1560037255196_0.21497964301957406"},"_hasShrinkwrap":false},"0.0.4":{"name":"ts-toolbelt","version":"0.0.4","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"gitHead":"f1c5d6e3a80a496ba7bf30b7c969cc202e03330a","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nsVR7N48ZiwM/y74DRGRw1/aLEaKX4vnR0ScQHgCq13jeNybHsPNwa9rN6/hiZhlCux2Fjh5y5dMllomYEV1IQ==","shasum":"f4a5fced9f7d561a051aba278af70a803f5f519c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.4.tgz","fileCount":131,"unpackedSize":668597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/EelCRA9TVsSAnZWagAA4p8P/00+HDiFj9wREs5XmYii\n2epClEQ++GCOwaS1GGD0gvnZnF+XjJahBtb6HoxN7t9fq+RPNlpJyyPcjM5C\n6K2ecOjXf1pg7VRO8FihwPZqdgUiM+NIwNd3p4gAHN9205GAy/EOkwbozmQL\npExgq+fEOUxFZ0MQK8zQcYPdc+anoViwbdn3RplHpTP+YVdW/o/yXrPOuzdO\nN3+kQq/t2urXlauJB2TAUdKpFK6BCXR3SjgX2KqFPoB23u/9FWvn4puCnC4e\nJjWssiox4lgEfbD564YlLBdSp+Lw2LztYRgz4JOVTH1Rv+q951AuIA0W85fS\nRdfWTjTZwmFJ4r248DVeOf8u+ygMPGNf9uc6xUX12Vt4bonckRIIYQru8CLU\nYOVI+ap8ZTPef2np7iY07hn7Jfr7znbWBa54Jd+PStRpH4g0FLvqZuHCak6L\n8DJeimWZg/izEY+RVX2wKHL6K29SWTWB9hn0AO9yK31hhxDL2jRn0e7qeeZz\n+nusU2lYvSxkGw1AU1PiBEGP5w5pjO+lelS51xUjwCV2D+GLXXS6v6yAv64f\n17ucr5Zc2ppq20aCaL4ZJEytTO2L0Ey0Bv1eCrymOxFe7wWHYJNJ8MuZnmpI\nm5CDw5pLA1xYGrVH/nBflY0C4/OgpS9l41LPqYEgk6buf+M6rPvZMRcHhNtc\nGVwE\r\n=HNB8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWLuOBHKMDcDNLc4XaJNx1daVrw8XZ3rfdrBno5Vgy7AiEAi05fpodRwpN0N9XvBkijqGBTnUMRRUYwSnHo2V4u/BE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.4_1560037284932_0.9315659148982314"},"_hasShrinkwrap":false},"0.0.5":{"name":"ts-toolbelt","version":"0.0.5","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"gitHead":"bbb2afcb84cd1ed3c3cc96d433dd47c086d33747","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jpI6DG+JyEyOeQqkZTWtDvnKoYNVOxAKXz9s5dLqKwjzwaDVK3LekVGVB5xDsV0p9Rz1/932Lr1wqIYY7wLchQ==","shasum":"5bd31e9549316c49a155b7d5deacaacbf5044264","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.5.tgz","fileCount":133,"unpackedSize":669773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/EiACRA9TVsSAnZWagAAnyAP/0ea/Oc7UxSfAKx7ngzw\n18lIsgASdtfUOy4+LidpH275SE2C4rpA8fK5zHvwEBMLwlyPvGQ9eOGEkAp9\nevyNwMMGjjvw+p83zitakOoCdtkPb4T+OkqRvRf4/86RorXVQAt7JLoQz8HZ\nrz43FLZzBwlyupF7NmA9ItPG8mXQ9tTONnL+5i+hUck9cUnMpp9TSc0MLemu\nfC793cb70PgHaLXwadaESgHfRj+y4f8qUqWp+mKj7YHiT5KZ/pC7+xg2dzKE\n7rnBqLDM3RA/+RH4b8IW1MFN6GeEy7C+XiTKwTfp2QiGeFZvO3YXnmYcn+WM\nCXOeBynKR28wtAv2U8p9c6ua7exwS6H7mlMDRjJk/TXx+xnC8mwHRrbVAQjn\nBLTun6SR6sAzIoVm49sYqWhJGZvUzRSGngn+neQ0l6PTelIwB8DF+0rR4HLg\nL4N8JWABZhArsQLQLePVVVfuFtX3r7pRWYPxr2/8zpk6LPM2/uXRmlPwjHcA\noT0wU9bK4tedFouS735AulQoIlKKcpo5q+wegDkRtJhOZxEbq/kHNdU3OXx8\nTupeRIpi1rWbip2+aF70QNtwDBsoqt3RkM40zxKvAkuBEwoT7I29t+spnr7c\nsmvEe2ddOT/H51UzSKj8UyO3h029E0u6Nb2Q00pdlps99+AiueZMkANke354\nZX+R\r\n=ghFu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICFLTopMqj6hoBHacC8/7ntAzWw0ZAVoRNw6FgbDRCGkAiAf/7QupK1gk+L7fOzzzGecGiFwJmbAM14GY2BCCcH68w=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.5_1560037504020_0.3329183445190531"},"_hasShrinkwrap":false},"0.0.6":{"name":"ts-toolbelt","version":"0.0.6","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"gitHead":"e7bd0f93890bdd8ee0f8ba7d574236d41ad06b7c","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rp+Zf/l22P7yaxP/hZaM/vH98dUdBcoy/ZHfA5kNOIqUP/Tq83JDzyG/FCEgD4+ISt8fvCl4FqSKA9rQAhERjA==","shasum":"fe97a187fd1893207cffa9c77d58e2739eb650ff","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.6.tgz","fileCount":313,"unpackedSize":701505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/FN0CRA9TVsSAnZWagAA/vkQAJuaMvEpji28eKuIaZbF\nbRbgLweJmmgzfEnj7KIqUc/2BLw351d1/muWVyZG2uaPpNHaNRm+YCrVb38e\nwn3lumnXq8NmwBRyE8AYUyhv6Y96lLtW4vuoZ6hm97lfaaJekYz4Tntk1eJG\n2mIUH8phCXx5fXTQSkzLNN89M3MsQFcuY7B3zLJlLv8QulFKODX5yVAxcIGA\n2SY0vf0O82fwC0HjkcqpXzob4OY4g/cHZHmCj3p6WMy/WzbFa/u1PVdSVI9P\nC/dAHemCQz/PmSAjTPzMcHtLuNHVMkQ0M0XXhI2Q1QwSkg20IRW0XVYwG2BD\nsPJ6OqwZ0Etlz2jnzyprwZmsmeGdDZKvfkTXpdb0ivAfTJRon1uA18ffdNYE\n+u0y/f8RpwWy7eBs5woLlR4hSBukzFAmtDFKR7yrBqAVWr2Cnlb7+XthDeeb\nXwTLJZ8I94GGyboSTlY892Km5h1s8wJL6QtzmUZds6WHJgBJofAWhq2vx0Z6\nH1R0eGLycSb7w5Ak7qkCgBPaDDYDlUKkvq8H5Ad4qYA5GqySY1pXQZzPHMlA\nxRq7lRgg7VwQVBJ85PMmjr2qxGRUTA4/qGj9rGYaKAEi8GnL+Pd8vaUF7dfh\ncM/x+ImTPt23xpAeRcUV81VN/Orpvd1cd7qxIb44j+eka/i6cyy/h6kvNA4t\nZt3d\r\n=M/iQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGU35s0iaXQHK8B8Fy9DwHfFdrRmBW+hryMqQP1OCkARAiEA0D5xiIxr2KIy0p2t7WRHSFViZ/+1rJ5gNt6LwegCgWw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.6_1560040308008_0.8595245084309258"},"_hasShrinkwrap":false},"0.0.7":{"name":"ts-toolbelt","version":"0.0.7","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"directories":{"out":"out","docs":"out/docs"},"gitHead":"e7bd0f93890bdd8ee0f8ba7d574236d41ad06b7c","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.7","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-3uOOXHa8hK5b0E9ZWQMgPPiW0QUPRmGLxmwtPtKYjPplPh5AkAnp5Tu1O9HjqoPfDvnZPbTceTfG4CFA8Z+1VQ==","shasum":"0bbcb0247a325f4ca2e1c27f0f46ce043909bc3d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.7.tgz","fileCount":314,"unpackedSize":702502,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/FYSCRA9TVsSAnZWagAABD0QAJUJjjOv36ZnR6/Zd6Bl\nOMAmPs0VxGZiM/cOOnWiJZgnZePGz2Z4nw8ELtUfEgewzXMO4N+OpuelfEsI\nkgAAacAbd6bXzbBJFvNokSxpF9KUxJ3XdIr8NQKIhPH6f8BqHW4EImdPfNjM\n5RpVqJata9R2s22g7P7W4XIYIHpkDqyv8CGmTg8knkHmXUnhpAvvE/X6JWvu\niFb8Do7NzO4b0AP0O7tqhalacd3l0nxzCoMrlJDCwi7ESoL8wVybwtSAwZdj\nVxaxpQoHY75S6vYQT8EQLyiv0x3Da6FxEvBnqlop6FkXL/30EazWEIz1WuQn\nSRnTvj/sO/lZjs6XgjOgncqSHAYI73FOyXOPLpZ+EQ4jO+ZQTEzAHSytUuhW\nbXEB3i7EFx7nWCDynSEcQ8jA8fYsEJRxkZGyRAUDIXrgpr3/JoFfUyq+957X\nmJHCIUkflxEQu5qP3QMfhyFJnzG05R+maZpE3SOwYSeWhdiR2+WGu0usw6s/\nuOY95xoPVXz34uk6QwIEUUU099+gAXLGSpfA+G04jlCNu2RdATDm+eiASz+n\nENNniyjq6UE+AexkujrlFwXfsp683JUQGUC8Ql/qR2Ei1kI2pM31HJ1Zdm4K\nEFJSLOyRHIGj4tNIQi58KaQPvGleRzBukjeIUgb+rM5NsKmpqgfYZAnn8y9k\ny+yw\r\n=kjaj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGUZ7OidOCEnSP9TxrxDpfIW4Iz26e+iEbETmrbbh0EfAiEA9tfWKoP5MH47sVPzJtnINaEgyuuXMKVXm9n1B7pu+n0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.7_1560040977408_0.0014840318839253186"},"_hasShrinkwrap":false},"0.0.9":{"name":"ts-toolbelt","version":"0.0.9","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"gitHead":"e7bd0f93890bdd8ee0f8ba7d574236d41ad06b7c","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.9","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-pfHWOt9L2XGaBCmYk7ucbgb56dTwA4xIR6PL4byB8Rmr32oFywG4oW0wwoVXQPA6wyEM5lrHTTnN/5EM+kEGug==","shasum":"e3b6d295786bde35a11c25257ca1af0aaf739a96","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.9.tgz","fileCount":189,"unpackedSize":128056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/FyvCRA9TVsSAnZWagAAOtQP/1VjiyYE25hiICzyx/rD\nG2zQsEWsNb/Wbvt1wLeua5mHVRli9xOFBrffXWfT0/eSgdL/YYnAfA9YaYGw\nx8NSg3Vx/n+jNYROFIRilrBhL0Bg10ixlJZaYgOy826NFRhTM9ijUswW7T97\nRAPARU/SaaAWA2NDZ6UVfC9N7nZxQKlnSLRVvkpT4H2dhA/901lG0bLhcc6a\nF/TwCCTXqve0gjcMjqhMVmzovrkgpXgfRnAGiO3OKD/Itd21zMdPcwqn+m2+\nTvSzKs2UNooy9q6F+Ye11IBEwufcrUhddM3c+ASN7dF+Gwq89QLDRp7Stcgb\no/ZBLFFaZnt0gLzRgNeZeXY8/xMyBTaLBSPJIHnrwCUdPlVCvwV5itFbMIMY\nN7U6qL2FkIx7InM/EXi5L/Z+CI5OKw3CcMSJSIHsU/Uhr2QtuHFmF+lurYeB\nEu7gACIbTmlhOqzNE7r92g5pbSxPNoAtBzzDvZWOuAPcEDocMhB5/xePBGUo\nW8RMGevpIQY0XHJjt1/VBOfNBdvlVLfEv0cSn14rg6J/82Ayfp2thzvbpoJB\nNWYmX29ykLFC9Io0EBKI0tA15c0icirY0nPmz0dp6Ql8DclDTArWAEQ8dLon\n9H+I5aFLu6Yzq/Pso97NHO0Ncc1i/aYGfEkxsLlymVOkifrvKUG8ZuCDwCZY\nC7BV\r\n=Dhsj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwzcWg12/IjAlNzBHxTQLuM/2AgdGSrS7iHgjBouMYdAiEAghznov+qxjCIxFuAqHrsw7y39kFVfVel5gTfyeix4WA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.9_1560042670837_0.13325047888962405"},"_hasShrinkwrap":false},"0.0.10":{"name":"ts-toolbelt","version":"0.0.10","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"gitHead":"e7bd0f93890bdd8ee0f8ba7d574236d41ad06b7c","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.10","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-3DkcMLFFbi0ZmzI+o9t9lrzIJnAVAkMaErWLUk3LfMWGSD+bsvA9+ed1sWpbwbHEy/P2RozWGohG0tcZdyPLew==","shasum":"20a905f878250fbd6fe7dbbb18902f74c48bc241","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.10.tgz","fileCount":364,"unpackedSize":148126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/F5gCRA9TVsSAnZWagAAFGMQAIsfwkeiU4AEfgA8DpBX\nI5fgo05noxl8L+loAlTaz86MKnE3Ymah1rSogWFUzMKlJgfQ96Lp9A2/5d2H\nd3OgrCEKvIry2Z1FgS9nVL3/UAmepCH2l++nkx5XxZQ3inLJ0h/7o74KoYAV\ndcQD+2Lg9rOV5rK2FeZISwdqRQcUP0RSOpNK2fCMhSBr4MqkX019VYu5r+AG\nAmF/aykWFjkCsi7c3SrzE5n+YcckADIqtokqFJ+qDTLXcnreQ289SFWHMDXC\n7G27lIBcoLPVor1rR+jqH1kg9MaXrkaEWRpqfgsEv7GSuzZRKkyRQLywJcob\nPDKrtHr3D1P+zqck+u0hCR6dn6m0ChtCaJMu1d+2OBoDbk/mQRk8yxp/KO0d\nqT4tfEm6DS2gr5EulkMV+5GZThq6Zsa0j+tcXhW3RCF2xrrnLhYBRBtUr9OT\nbSW0EyXLLxaRRJnAxR+YX7hbkSSK3JosxDdh+Mbe8LiEK26NQ2a+AaH5WuWU\n5vnzbxoZnH8Vmxz1Q9A1xdGRIYgkOKR1kxWI9852OYoNLodPa849iyQMJ+WY\nVp5G/QChMWwQV5tT1tFu/wqc9x3Cycd+rozjc+kf8vGe1ye8M5VJatYrT4a1\nLtj4bSZ2sYtaSvwphm1WFXXSNDE84hQSFHeyu3qLE7PpbQeEWJ74Y0etomyD\n6b+J\r\n=2ujG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqm7WdWvlQkJ4gbjvod7lfjSvGil0Ezi88UqxpfdtD1AIhAPGrcdkZBe0dbNvOWxNLKhP9V3rCKqoSKkkNWW5vPMO3"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.10_1560043104324_0.08322732643142339"},"_hasShrinkwrap":false},"0.0.12":{"name":"ts-toolbelt","version":"0.0.12","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"gitHead":"e7bd0f93890bdd8ee0f8ba7d574236d41ad06b7c","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.12","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VHx337eGRqCozLPulzlYBP+2RiFBb/L6uBeNpIr96550aywsRu0/5GGn1knAi/dFeVri0DPULWxDu+wIZuAT8g==","shasum":"11dc261dd03acbe903cf248b60cfa71b906509c0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.12.tgz","fileCount":364,"unpackedSize":149603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/GZBCRA9TVsSAnZWagAAZqEP/0OvOofwKNzebYQYCvtj\ncCjSL6bZL1cDOYITbng3DW19CD70JPXJRJvIEFgi0nduSfkIT4lJ8gJKbMjG\n0A71gtYBWCTuOiFsnjQMZ9MUb7IIY0EtkJHAltL1CaXetH8WCEVKTVrPZWis\nFtoKJCFSqRQk1h11SKN0U+hKv1mS3HqyB9fBJI8MS3VAuFNVkwCFkJs/ZIZ1\nfs1l8hC45l103T9pPz3sMN48Hd+8Fjw3g84O1iHrF12dyPcf9440RmPESbiq\n0NcNssKUg1F7IBpgwn84MRupy0aXZeIr6tOjUy+BaFuWx/LdIZ/VTbfdXKBT\nNLePbtbkWwclihwkXUk9+OXj4eJqGVk0nQJ+Z1TG+/Ea8WvBhL10cqOi8jE5\nDwjgQQPuZ5gOsXjunveffSrBo1S2FFbrs4EzPLA5GprJr/1gYYsVLirYryH5\niytFzAPXaKuKb+2Gj/euberB7Y3r1Ldwbu/F8Tg4k56hJivqk+sCL6ng5ZDc\nq+ZCPuLy/kZIU/xc8j+hqFoB/lv1Oa1kPJV9qafDAcx3qtd7mzsuuE6KiM/n\nNgKjqX69h4lQCEYFr2ZzkjKd7HEO8HBq6N1xJu03Z6nluYTG+t6gEIh2ymhj\n5+tvRazhkF8uVvatz2Q9olBMwxySA841jG/GM3KCw0b+IwhEfs0LnuFq1GDT\nzYPf\r\n=k4jL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBi2yehRx0q+jrBuHXwJxmgc3eS83UeAn7K8Qlz9MBgiAiEAxojiKTtJsCYgP9vP10E/T7uLz+fZScJTNupLmdl8YBc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.12_1560045120395_0.49159378321543"},"_hasShrinkwrap":false},"0.0.13":{"name":"ts-toolbelt","version":"0.0.13","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"gitHead":"657863cf27ab7ec3bf1212898f5198397239adc5","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.13","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-I4YnWs/T0E+km9/xlUS+ukOGw+0zaPoIAqbowNlxScZVpvBtqQt14qLzc1c9OURefHCzgAo3h6dgD896/v6/AA==","shasum":"7c60350f93a805042666b68c825a106d4233f691","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.13.tgz","fileCount":364,"unpackedSize":150442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/GpTCRA9TVsSAnZWagAAyvAP/iCc3zIf4wc7tckhh9nV\nYdAZjYqBSa9ZHaxM9FSN7zgCGH66kjn+gJvTq+u1MHO614gL9pGR/B56K1U4\n6jMG8YYOQyueIQxCKRkijcsnBoOFe5P7T3x+2+db42yEshOvfiCpYZl6ZPxs\n/q+ddM6kXMrr5hHaI66zAvWJL3oPXw1s9WbjTR9N5tc+BIc9PolBTSdw1qUq\nnY/2oB4UBLwuRjPH7xHWzdB3q6KovxjAGhelZITecTi4i0HmMFzJC6GVdvCF\nYWEe1RgGJwx5ujFQ6oYiGk5jP1Lw80sOH0f2+y/oL0rRljtgrb86PEDJuR5S\nD00dlICpBVJwaIpzyTumMXJmdqaegDHU3cm+g+7cQzN4wgZuZVFrJi1fPEIo\nlaUw3bKnB69gpw9y5fAiDG9WAq0bxeaWA7xph3iIp42x7sbmtJKGAId0ZeSf\n2g9bUhX/qr55uIHjsAL25heVzLiL+2uorFrfnyzRrUOh219OcdtBtMINPnAt\n+6Sh1an9DP7b3eXMu4fvwzGaFsWKUiBKw0f5zqHvTe2wN22NbdJkx2FfN9+z\nD08ddFYLLnk9W7CUJks5ARvTOmpBXnxTuy/C0YCK5Sl5lLsKKuweOw4V5rCD\nHZx1mfqcTwwHeefnrgDuPK87Ks8nS1zw9p3MrFSQC0JFwoBeKdc6056nYkzs\nXxjJ\r\n=pCTg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaje8dKL23KxJ76xrcEejSylMCT9RtkUUjQjmeRg2nBAiAR37Q8GBVYj/t0yX6NF8+bm50m8KhZ2oVJdJcqkjhvCw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.13_1560046162470_0.0006507583706323317"},"_hasShrinkwrap":false},"0.0.14":{"name":"ts-toolbelt","version":"0.0.14","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-tools","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-tools.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@types/ramda":"latest","@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{},"dependencies":{},"gitHead":"c1cdb25c64fdc36c12f6ab7f988482234b3335e7","bugs":{"url":"https://github.com/pirix-gh/ts-tools/issues"},"_id":"ts-toolbelt@0.0.14","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-heQTKzQnMKMNrJkV6oQrquodKcqFF3Nd+8g18mjFM2RjC42DdJEJ5hjd42ST7If4+ZW0ro+wpZ7AYvjd15IPlQ==","shasum":"a3bf5702d3fc68e16a48e7e0c54cfb94df1a143e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.14.tgz","fileCount":364,"unpackedSize":150442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/GqpCRA9TVsSAnZWagAAPPAP/1/sT3jCT4CSu2Kz57DX\nnuEcZ4L7TLC2A1iuF6zxotrCJWUSimRIgc9OhA8k45zo1aQ6FDGvyB9x6FC1\nVKS4Ay9IPgRkJaGaFF2hNti2zybHsL+e4mrM3FUxOn4AtLMnZwqpwwgEdLoL\n+2C99EWqhlj5JNjDmJVCdmzWlDKVbOO1EdpVRpjVzGWIRTCivEAc8icRLsY3\n7FTfycaHMo9NYaFJ82Y2K0pq5k1O7+JX7jf7L7vrG0YbwFGSwx4EYXJIuNRM\nNpGgzDgFZ+D/dfjvLxE4s+Fl17zslnONJSlhmDFAY1uRSNeTwOzCgrNMNluo\n7BsTB7JBreF+gXYE1/T+KQDw5xa6i6enPs3TQDwtVsGpyFZylAKesp7nuaXo\n/0u46dVjRvSdCaFEJsylxQ9bxYUh2ZEwBEJNX0/HagZzPs+1ZT3FFLz8OmYc\nLI/6pyhbNH+dgFoYSQAz6GG+LmmJl00E2fhY4hILZCtVsvv92nLlDEC9Ufl6\nLibz/zGXShAsidmpyIJJu5flx4lFVVmEfXaSKcliTpNoL7bbBX9Pzqtuc/ws\nVYWM166P0330mhD04EIPcW/0e8TrZDqFVYVAFU2AfaYKJ0oO4hxAiKyJdT9I\nS7aXv+Q/Utr/WkzG1r5BdYpTFDaeydrzc1K7bcK959e737y5YJzjhKjpLUoo\nOM9v\r\n=ebdu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID5g4QCKnmkBAot6E0pnyGH0zHand9uhQnMxAZ7ponVXAiAgA0alc0t/E90xLnyQziiWOexAD/58g75fwv6RXbL+Iw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.14_1560046248464_0.03749417921155329"},"_hasShrinkwrap":false},"0.0.15":{"name":"ts-toolbelt","version":"0.0.15","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"d573c5f41d0feabf8c844b94f677589b12da2f93","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@0.0.15","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-d4yGVQSWysWKAPV1uv4OaE2ysmRgnaY4aM9HtaJicyjcdKI4z4g3NFGpHLZ+oKPQC3RdOziUJZ9P7r67supXdA==","shasum":"5edff4e94f1be992a74e901f3122fcb5c13e3cc6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.15.tgz","fileCount":364,"unpackedSize":150453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/PYkCRA9TVsSAnZWagAA6HYP/02c1qjjDEs3etnRSeWk\nCAPW6Ik9GfWO9GQIBUEdR70+GIdtxrUAljPARIo3G2hh7NIewdqPwkmjksjq\nHJiKMADLNMxO7+ngryZQ/F0fb9De+zFAsh/4wgzYm/yzznyjTq3WtMflwmpg\ntKfyDCNxgSKk4C/Y6lqBEmxWA9jHQoZIZNsBhRzay1EweKKTVCcXNH2SzjNN\nc91fMTL++Fvx64BAkoCypOh+AhK0uJCNwCpVDLbcu+x5+HQojSirykURtxCV\nmCAh389eBLDG7mVLP9D2IeJ848oIo5+bfLTYa69xrPrHU2zNNng1wxoT0KHV\nggUIob12UCbTlgNOvon59gkT7DcNBQiCg8hszjFsYGZ0r2dR2z8YRQnTOb1G\nVB6TPxj7vURpM7+9lBnTd9NeeYCNSlePmtuVt/kja7iNj4X3W2oQJ5gb6cDr\n3GJ/MG+dH+ibY899Nj3PC6w51+LuU1/yK87T0c2mhhHh528ZUC8nMmdrArra\nN/1++HTVVzPDdsBvSCoAcdkhU+bdcZCozKx8f4YcJBYr1/5gWg5gNaVNj3Ir\nkHAZnQVYMbkgp43VAZM4f/vYIcGyGUzouN/paZyj2xk3tyS1FWT7+rN4TBkw\nDfkMgMf2vPSXP/zdPYmhF3/j7tHBlNI7eKePayQrTokSd6cbbK9tZhvTtZZr\naex8\r\n=Ig2n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMLhJBjeksgkCufKg90z7mMrwTxurSIFp7spyq/vTiegIgWu8uv2ey+PVzPlmzZsuhDbswgoTXkdgrrGlVnr2ylDs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.15_1560081955557_0.3154859703917159"},"_hasShrinkwrap":false},"0.0.16":{"name":"ts-toolbelt","version":"0.0.16","license":"AGPL-3.0-only","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","setup:dev":"npm install --only=dev"},"devDependencies":{"@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"b85735acce2c8bf87cdaa39e4e9d4e6e01914071","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@0.0.16","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-pQMjQOWzh+9ei41WVELBH6DlyVYNcrEO4pevOKmCFp3KIdZ6AA7V60eIq+DqvgSUIvvHclrZYCnpg0/nzGZbNA==","shasum":"549e93970887955e8a29df869d0e1201071817f8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-0.0.16.tgz","fileCount":364,"unpackedSize":150457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/TbqCRA9TVsSAnZWagAAjAUP/0FH7OkPNFeVp1Z8O8k6\ngww8AETBXDKbQeCCJGV4q7PXcMOIkSJfhUO1eKd2CgNOhUVSQEQ7QzteByNV\nHC/AP3W7gfoCrBeHSWHX92WYky/3cieNrWX0u5KgDIH+9EsvIqcZH9S0SJfr\nYL8U6iyjlPe7FxXVemcyCV4tBcy1GS0lt7993yYVRrN/4vn4PBiIKmJ3q6pc\nn5v6F/ygbXrg06VG0A9flJx4YT2m/nGv7SmRoozTref/rbGf3H9SZ0kSFk9k\niO/xfsr3i02MpEhZijet66+65ZjpPIAVZeoW+VrFeDMEFIOop3kcK5dapV0g\nrU5fCXr5MJoilfSSCa9POtRFhbG2fxCaoMXz50+hBUAB7mMhF9twCqCK6T/S\npyIISRL2IyYe7iBAZNmYHk4f/dYiJZnPR6Jp4cBbIIPbP1Sw+fVczSU2xUCY\n9egvyaumZAfCHzHQQDUi0/dTQJbDsZYUYMHhqHdWVBCdfAul3+XmGmcyv+vE\n46FjyoKK55LH+EEnjJYVlNDDRsyYJSsnuZU0Vs7kSUgaP5+HBZ3OaJ3ZOUnQ\ngCXdPy1mIWyKPNtTwF9lYxO6CzD37mYbKDDRLsgKQ03m/seJHdJ8UGxaTi8d\noZNcO8PiSdeYjCkyk7DDVdv6HeCFFeAvnli6B5qJgcK0lN2FtvD6kxYRwhoh\nG6GK\r\n=8VW2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAug/u3m10x+tGtsFTvK5Z8Wz+vuO2hNF3c5UNom00uNAiEAwK8/1gFk0NS+3yyshYBtIoAtCflYUgweAWuF+5ST5Ro="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_0.0.16_1560098538307_0.04171869472476075"},"_hasShrinkwrap":false},"1.0.0":{"name":"ts-toolbelt","version":"1.0.0","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublish":"rm -fr out && npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"20fbc734e2cd8c961d906e9b937c9e5383b38cb7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-w1pdchmes21TXR4DhguTkTDmPg5f+u34ceFfHll0jir0ukAUzwRWKCeQqDWcs5vu4NYMAHMiIhWKGCIlxQNwwA==","shasum":"a587716266e0b45e999651fb2891537757d62ac6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.0.tgz","fileCount":199,"unpackedSize":108543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCAo6CRA9TVsSAnZWagAAO84P/jbocxm2XcBKankWCV53\ndz5sQJtQPoMGUSMacWyIVEidrojCOtINBMEvBnNOmBFZuAiQ20HfJ7a0pJLh\nRlj70XMQ8pqjUFN5A0cNpkd6MdyTDQHalSQEUjcgNKM5Nl6qkTzDUNUANOeX\nZN0e3SMPt7DyECNiSXbp2z41Invj3g7wa2AOvN4mS3vucbhS+8K7m5cG+jxq\nyXT9RuyrQ71zxB/EZ0Tbtl1+kbrvjtwBDEO1D1bgK3AYR5kY72737Q9sc8TE\nJcYA5TCmpmcGmXjK649z+LOL/pFqenceUNLQwNVHnQjv6wScoAHfoFYPRlPS\nl6XYmSOX9PK84iuDv1ghZ2xymi/Vy6536b4ysg54MUSgfX1m/Yg+buWoQNQV\nZ51AMRLOIhCK5W0tlR/yr9spC2jOSzsX6gi5FgdvE7L2uJ0Ypp29ucRxwIlL\nsMh6ptSMl2MBqSPODW9GAfAE3Cij/sEjcXw48I5IoIheWNAZF0/hYznZadii\nfTqX76kq/Bdvwn4On16H1PglGDexBa5R69i+hZd32M6S7DN6/FGvsXS+3xd5\n+jC0d2ZJcZE3/18KosAEB5h2qj8HZca7rvDXbT+E/cGRaSte0UkKzkO7H91M\nZJz55c35O4TgohhRvsHyI3RqlcUhlfZnHzH73iHZRCKIro8RM9qVy5NJ/f9C\nIaPz\r\n=epY8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZR9k7GF3j94XKrquVn98twXIlQC43SAsjTepe2A0a7AiAcCncz+Zpe547p9lA3RGHGqXX+rYez1XPS3fAqYQeurA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.0_1560807993970_0.2177545706562336"},"_hasShrinkwrap":false},"1.0.1":{"name":"ts-toolbelt","version":"1.0.1","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublish":"rm -fr out && npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.9.0","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","typedoc":"^0.14.2","typescript":"^3.6.0-dev.20190607"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"2c43df160919452338b63449f26ed3386fe6c05b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-d/CkazFUgNegO4/EAJjz9woID3wnKLBrf7EZ783zyYJOjB/ZPNCfVCNl78+3W+2wp7IGxIiDxrvRM125VR4fuQ==","shasum":"594ab05d05abe0d7cc473c99170181a7b4981a21","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.1.tgz","fileCount":199,"unpackedSize":108569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCAxeCRA9TVsSAnZWagAAegcP/2BC+CJodh/fOCMc+zv/\nnrJXJDyUFCyxxlPdPCA30FqgJH9u4n9JVufUlIkzVDbokGBch0shRgC7FLNQ\nRVcMKKQPAVQfvCuKCm4GM4gBy3mvg3yDRvz2LkTzbxOWYAiWzl+erEQ+ONCu\nUSvDo4sRP+laPJj1jRUrUCxzOcbJHLkYyDYAsxqTMNrl+oRDL24e7Z2dWBIx\nRWMpMfXuP/alE+Lqai/c+EYACbIgJZzu+JMARGCJyOUZhNv+h/oWVEa8p4NW\n+UDa7Lm7FXwWGIHlRvNArXISANMYyBrNrXyNknkr5jDXcsk+iPAsJyIhhFTq\nqeQRjhtSSvZnmyzphHnuFkZyKw5bLoOGb1ujbyCEru7KoDplibjw9hzvF833\nwBbhu7MEe6xAkNbncOZxLVUMEJvq9dmwYXah23iOmQOUQkLNVvz2bWumZPHj\n5jElQ4Qc1kJU173puWMTNmNqqYxnTNfkQD0Q9APqAG9rln4jrZaXV5GQ/nhE\npCjyGlrtzHVCK+pzmNaHIySQM+hzKOaXztWcGKSluzzmnfuKG+49BKhjNx4t\nJcJjr4G7dJalXjcU/NScAFBioM3xQU5m7if3miS9fBkM5BCHURkqUsp3xp2c\njDSmA+3TJpo5ENrB5uhtC4xyWnSYBhrWGviPq8VYBUFj2OPDbs4Rq/1me0Dq\n/nfF\r\n=P0SK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGbCPxA2QKt4oGarrCs4JsVnYE5cPL2R5ps3KeONdgHoAiAVjFxjs0lj3HBVIjqbOT82Vdho+BwugWrVkCE+OZnWLw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.1_1560808541195_0.90333311325505"},"_hasShrinkwrap":false},"1.0.2":{"name":"ts-toolbelt","version":"1.0.2","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"next"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"f0dd6132f720b9df6ece1c490bdcec87f8939cc1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Qm8aSSSZxRthHT9JR27LDOj/49l6ZMiVjq7PBtw3WvMrDK76UW1x0Baxs5hCypq7jfyuWYw3RVDInk2GCUTxIA==","shasum":"5a71e225da09ed9c9238034c9604fa760a170c08","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.2.tgz","fileCount":199,"unpackedSize":108663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCBDLCRA9TVsSAnZWagAAnlsP/RBYm3vzSf1nWwwoFKdm\nx1gWuwpK+ckDMADmXn+su0IAxFPFgwNTUyvIs836+/4uAn9INkGNz/fQKDAM\nihe0Ddozu9t/UsTVmdpu0SSfs3JjkR/yQ090OPXCY4ZIsQWv4zMD3P+VhGiO\nJe0i8TE8ShOF2DA1hKdAvY9cUjtpSnKriBKumTroLwQD1iFH7T2NMyMMMyK3\ngmSsco4b7rC7CZ5HxBU8ePHG+/LYW5ls5/Qgvp2yokr9RzodbTrkBEstY7ib\n4Vq33/jai7gFBTkqcP8iG7C2E+rx2RKxmIIvmFi4qrD2w1jkB19bGSCv6Udp\nbYE97BhSvTjxjKH/eoWu9kSulEja+j7N0FGjuEfGxuroBUd7LYYSLx+/8Q58\n56uFT6XqI4vx0VifPLXJWAGRj1HWdyIvsKrAgq1ODR63ufOLlCtMD8bfb+5S\nC5f+Lsp52MPPUIvk200e9Hx810gsJQugscqXfo10bn3lnR7PV25QZJRJlOwa\nRWUxJTXG3PJSHxa9S6fSn3H3x3UGOrkRhT3trK+TnR4L6RawahOkAdQ4J18X\nDgXc1n5PBiaHEpB1jNjFaen5oOdrcq0vIFarkRb8dFkEbR518Nfub0SlqBkX\nukKBH6Agl+lMhdjkDDeke/xxulpjLLEorN2CYK2UsuQtKTB6Pk7VFCRN1qaf\nQBRk\r\n=ijNI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC03pDEuogJQQWsinn0Up1KB8+/j20M0zs6ZJvK0JHsBwIgYoCbViN2RaWHMBNqZoAE7ElDnneieOHDcBgN70olFIU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.2_1560809675171_0.9372337865999487"},"_hasShrinkwrap":false},"1.0.3":{"name":"ts-toolbelt","version":"1.0.3","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"next"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"6039a000325b966ba45fdf2d99b3d7937f2920d8","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fmVtc9JNdJiBDZWherpEb9Xd6MLv4buQJYFAX0FQzCWDw4boCjwy+fr2Ekvm2G5spsE9v28OST2FOheqvAI2dA==","shasum":"0189d46ca5d063c4fdb348750bb576fe8039205b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.3.tgz","fileCount":199,"unpackedSize":110313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCBm0CRA9TVsSAnZWagAA+CMP/icueib+D/dH8SSX3MVm\nf1M3p0TFklpyyXaUusNBOb5MbnWP4MrPvjYbyl+r1+kvzJ/D7YH8ZzM96knp\nSnDUECz2PED55UuQ29j8ZeiHLhYz6WkRW4c2S+as67hXYYIbTVASI6SPnNQN\nwill9kES82cdt5cwGq3A0Wh6mGBKOzZ2uEiOm6g7I6PpA3duvijwgXoGNy/h\nx9olxOpyNe69Q93ZUdwU9ZHg2xGoKuaL/dmNUCxNz9OSiImeWL5PzOaADfoT\nHTX3MX/W1+W9xlS+jWdrtiLlA46w+smI7l7nGgEqlX1NBL+m1oFYC2ZEOvNN\nlTB6goJzn6upjrEb0d5umiOuDH3alFlQ12pj/5LYOtHIkrOCOAZ2PXuvQ9VZ\n2KLjP+CDeTwsTSYanlguXQXLQHXkwWKLLmgyAmVWhXz+YDP84S4EwjNcjJpD\nghVdy5CA4uiSBMOftfikArN+rG18yMVGDCsKufuzZJBNaW2BGPtIEQgNvUHZ\nLGcomynrFcAcs5dUdzNyAInHAw6h8/nlk2p/HsbgbeOnSa4BW0Myc+A5yzKt\nKGzBfAROPlba6W9Je2O7GDKsFokKAHJNxw2ZNVvlXvEEbIHzz9T1p3XoStJO\neA9Idi7h26WbKp5TFszSs9C3NjC+xWaxneZE2PDmJbrugv4YLPdhQhb/8HX5\ng74S\r\n=zF4C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYve+I6Yf+p8k0+t/tKT2Ut3FqKDrzyxRhPKYD70WvVAIgFyQPT+mtTdkQ1FuxchqXAMfYicA+axu3GGEQyrJV9M4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.3_1560811956087_0.4740259550485275"},"_hasShrinkwrap":false},"1.0.4":{"name":"ts-toolbelt","version":"1.0.4","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"next"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"98411f3d5fe84f3ed9bc39f78a9acd0ba78aeef3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-GjNZKa5uU5+YLhjpFJqQmfcuzYJPf+ls1M9pYJnlsv3USW55dMgv+tA69HVcnk8Tq7TvvKCLs0rTVP4r4vrGvQ==","shasum":"a06b48dacc4274ad3c9f19884cd440f3bc00549c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.4.tgz","fileCount":199,"unpackedSize":110313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCBrPCRA9TVsSAnZWagAA6PUP/2nDI6kDpGDgIRGlmW5n\nCVOk0F78m4TjmoGFNs89UyRHXQ7NsaqvzhH2itTzAatR+DOHbkXHi83zv5Oa\nuRk3zPwkmkUYx/9P+3r1YAYJz6eR1wc2A2VynLRdFWFMclp+D9VKA/NW18Ef\nHVj0+F8Ui7MmEZwFb20NHqZ+6rs0y2G7e0m2NNEMpv7wP79IE3cu0GwvfK93\ndLVkMr0kBCO6eh7qZjP/b8bi/se4mQVC4op657UDMpi3C5OamKP2TWmFcSVx\nOiyA12vt9xJ7dAnp2+HQ5fH/4UjsSJM1B1CSwBe3bUaGIp43/YZPLI2rP70l\n9P5ldivdQrBSvvPCUwfFk8w4VhbdFnPgq4cB6P6P1FxA8z9eZyyA8xvHhGbu\nFIetwGrTScDMFQMs0mDWVw0w9SKaa1VOuTUOpXzmgZ4TgQWJJfqgJhlVfzSo\nom+Esws9OlYQdLB06KoOG8ilB6hT4vFkmH0wi/YPl9kiTKzcnmGDOGtfSiDS\nzuDmeAYu19lWeC9apwPo+wOGWOvmQIk+4rHUteqGksLCdAa9iowZK9BtDFcl\nGvID5NUg0nedh7548lfFJKXvH0EjSowbwmwVBeDzjuq9Ml2e0Ek1B4aWYyNJ\naO6FG1UUi0df3SAojND1WNcgWVpWm774To/k1y8bwdNiEApgwmLiXWIa/Ezk\nhljH\r\n=/QyH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxW6ikXGUSrJjyNW4oGmEJi3Gc+zJ27x9AS1lCWESQJAiAaWjXbPYPkMvkZ/wT1nwaXsL0FvLLRrB90rTqkM7WYsA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.4_1560812239317_0.5717958428302075"},"_hasShrinkwrap":false},"1.0.5":{"name":"ts-toolbelt","version":"1.0.5","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"next"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"8898f1edf03809a9dad46f4565d24acea24a147d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1XVq1mgg0BbiS92pF5rI+Wwk44wpAit2wTRgo0GM6FQAEUmduIyQHE1K00Mm4SzGaPAiQaEhAVIdwyc5n1lZ5Q==","shasum":"38fda2748f4b4ebdd817d6e71bbdb355c6a60be3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.5.tgz","fileCount":199,"unpackedSize":110313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCB2QCRA9TVsSAnZWagAAWhkP/ikxnCc/eymsmGQjFtyQ\nJQKonQfhIqkeEB9d93dgsmfGrDmDqPcM/1pbcshxgxnimtvQqlXV4JnZscFg\nfXPu0odbJQOV67+Ib+b7kYl7ANlIfwyk/BwnnKm9jJ0RTMYXJU0L66MY1boq\nmRtHIo844dJMooFZQEapa9OA7NhEFn5+/S4tuoOXFIUQdYanuhjfKUuNQ/hL\ng15Ulvk9DrBasmw0bBtpJco/vZyYozguyANjATGEhEzZAtHRAkn4B8p1yWGn\nK8WmFC0xoQOb3lDrDBJ1wuu6k4DLSCmaozzbIsjC84ahQ/76Gj+UAwZGa6Q/\nPFsGvDfwmWoV76WthcQWAeSpUCBAIJDQYfd455CCVE31BFVW98XTAwtlTZJN\npHG/hXur+G3GTqbtju7IMBpLGzt6MVJ0J7fszka19vn9t0JmBJVFh08LG72h\nmgFu2tdU3VN5Hz0M1gOWcanc8qZTWlwsSNbKsQ5LotyuAPPkHiSAoTZhBCV3\nghui92IHpWIrCkFrbWn9iH13sSQg2d6kXp3IeaN3UEk9ghC6okgpsiprJiNb\nzmBk9QUNdgl7EuNEfc4KnEzxp79gMdgw9hu1putCpCM2mzT6Va7GWVNZuUea\ni7MPZHJUYmUUnBdD2ZPzIi9ej2/HuELuOBYITg54guO1ZbfJuNRruE04GZJp\ne7Fl\r\n=wQzq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDMoM2xTS0dcnaJ09GYhKqFBEYMDQDvxBc8CtkZy0cfTAiEArRI4sZ8tjM0s/8UfVCfmlJp3MhwPT1jZNwbsdAOV4so="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.5_1560812943525_0.9216950190162834"},"_hasShrinkwrap":false},"1.0.6":{"name":"ts-toolbelt","version":"1.0.6","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"next"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"bce1ff7d9363e5593c2019f1422862d8284637b7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-KkkpfvK8wfffRNHoPvCoXoWKeN9jbyuh/KqCCgEwh1ZOw6F/bU1NzO092sUwna0MQMHNXzZckUJQEm6J++oEhQ==","shasum":"d7f21cf10b9c561212f31986376e710c8d3eef29","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.6.tgz","fileCount":199,"unpackedSize":110313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCB5iCRA9TVsSAnZWagAAur4QAIPluG4/Op3GqXM6MhEn\nfwOw5JI3mRZqdL4LRu6zIVdFRnyUJlqh+SIBh8A9vw4Xyj1UXJOMpeXmVt/r\nEahH8gBX8fFtejaU5dB+6WwoA0g5/7PmXr3aMSgcMb+WpDk0dHAQaNb10cDF\n+A1ZstFOKO4TO6fJRQFSDFnRUwJoF7/4QChHJ4v2uRwpMGfg+31mR48UFxtn\nVOS88YQXqO7porXb82Z7hdIdHcDUBgv4iOMFRv5ZPtBs9XZu8ds6x9BYT7NP\njdNhpn6hvyrtD70rkc2xjX0DqnX32SpTEG2HtXlhdW+4875ZouihrMXLYgW3\nLGSd9i5RDOEKnOmatmtKaG2XfBeZGzt+d0KmnUIKOjyA6GZH33UU47bM1+nL\nvBLZHVb6c6UxJL1BiWrC28LtoAik9M1XK1SSfMJOYAmMXWHyyE8rvZgc1ELC\nc4wCw117s6xf0SWPtBIgotc29kbDGGYUWDGbAIoHmGYks9DiXkwHiW308414\nsq9jmdSN0DwOdiOm523UpxXZLx2pyjj0bS7s4NBulzjPcxq4ZhyvNbttZgQp\njCgaG8vhZd5LfgkSiZi02m1efH/28KJBNarQ1VVtTYR3HsawzDyu4tq+Pwxc\n68EU33/Db0nwZplVpf3FDT1cGYl1y7rrcc+qxYYMO7tXxu7EMkuvcpSmzzWr\nx3BE\r\n=nnEI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICNFptxQfUt98/mBe4fU1AdpUgH5H9RSEwSaFKlOfofeAiEA5mmro6R1rlExgh4JlfJyBr9CNx6CywTaBVxcUpzHAY0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.6_1560813153593_0.6334439091023287"},"_hasShrinkwrap":false},"1.0.8":{"name":"ts-toolbelt","version":"1.0.8","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"42d6e4c9658ab8375964f17f06c92751df483953","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.8","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0FrDmClYR3EqQdpxHQrxlPEPpgz5Pa2xKwDzvCZfHmSvNI8JYaePaNAEQrNxteUCvD1Ch6nqZB0gQGhHtPgKsw==","shasum":"28776d335b0ff40968e4cd3a0850d60d998cc16b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.8.tgz","fileCount":199,"unpackedSize":110315,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCCbtCRA9TVsSAnZWagAAmkcQAIueVYumTb7ZwugqF0lB\nMNKGSu79UA0SVh6PlflsfpUR2lVurd7B7yR16CfypN/XsjD0SyT5pqsOz1nn\nyr82Aux85D317KWkEL2Cqs+k0QJ7aJS1C2sjtgUVEcWtKh+a+xkehcjmplS4\nEYajpXJmm6r+f+DDJPnZS18vnq++Zaok7ByPxxYDcK2uRPGYB76dgUVOdF82\nu8W4Ai3tZ6Asa2qfITzgU618hlERK5ZlYszObzSA5OitXJI/7Ht6UjbJUC7v\neHHeIscB7qUCV4vmwyUeIlDUmm6hoTp4Cy0JQtHdD1dhZPqtIbmmpW8Rs2bc\n8Xkftrm8+hO8ZZgqVZXNbSIHYrDPkxmd3/Baj+kcz5vtlZTfvizg8v8qD0wr\nRfHiRsOOCYzFfAxzS7wMSk47UVziNWQ2afl5caGJClpEtreDt6F6CZrKb+2A\nJXM9KdngKB9XHnkWYAgqPF8b2TNJw11vVK9tc6Zf/7N1EO2/9pEFmCbuby0R\nAkUoojLOp48jR+u3AmoNpo+yirzYXQ/dPvfegUgyySGmwTZsTpfa+h/O4+tt\nIeHGW6hdZiBHCZ8W6j5j5tvL/wQ9GAl+3EfskqlOsG2Rd67AJ94ixGsMOd54\nSMSIsbuVHtdJm6Y9MmLAXI9GhD0jBtoko6ZwyKvPYONftR1Fr50jcLnlsFug\n81fH\r\n=/YCZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBDZNny6Gcfagopg7MJAriFX4sJlXNvMdyoH068qc3JnAiEAutS6C8gstzLkDb7BsmMaJZp5oYyfipUurpqOm+2OUS0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.8_1560815341075_0.014241267955977799"},"_hasShrinkwrap":false},"1.0.9":{"name":"ts-toolbelt","version":"1.0.9","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"97b422f759b0de68fec65de1d15968437395430c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.9","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fDFFfhIul2uDFm9GXBX94AbN6nFGSpLIAoYYxP3JUQHmWB4cpUww6n2WcQGTY2YhIiysysXF+AywXkfTbg8JRA==","shasum":"fa63d8e6e02b6c9913b1cf95a18099707ab7b51c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.9.tgz","fileCount":199,"unpackedSize":108874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCDLgCRA9TVsSAnZWagAAuB8P/2y8nqrwJwVCW9edqTj4\n6Kr+u/8tCdPv5JOMveHPpzwztXHDmfK/MAs5pUFNpG36ZAtpAUTBwISHFx2o\nRnyTlhC1j/3UrXpxpz5ENBcerNYC9q0ePlHaNknLyU78eeStF033Ybo4fXXS\nfaRYnt1KEfGS53GEajyMDxeG6rjYDeU6cUcgEsKgRWhmw1+tCaO/qfHX87Jc\nJh6MLKwC/kkfLmfc3vIYCMfqqXHWtc2r2iba+tJ9XP7E9QwZ0zM8TKOnY/CC\n9zhGVDxxKg4JMrJzZpfZncSWUvUMk5XYr0Ov2Mx9NwhMHmnmvVDSscdMqnN5\n8lUVivQPe9twtdA4PsS+OHInvHALkQt2zCy7S1AD4ycAI/gl17y4JyCT5EAI\nybPNbYG+1JwvM/wfG4Jrbu8UKr4WTrdrf+yz1qKFUSNtz1n4113Lru+qhEI0\nRPvH27cmfZNLopJ8MihiWuZTl70JCNnxWuk+jQG5lp+18jCoTUflicT1z9N4\ngwJEq1s4k+RmGSXIM6yg7WwxFGdp/s1SffDm3ev2+7kdsZzWQkd4rIYLcpDR\n2di+E3zLT1o8Y1Ol9KnpFt4NhK6sjpAVCa2dZgW4FQjWsv9tVIEy18FnTINA\n+anvR5wgObxiGNjSWUbxNsdgjm1KL2q3SUOT83aqby5LRH8ZikaAuxNND3xd\nzNKw\r\n=RMn7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFLhKlkKoehbkVOFF8NUAW96oPRg7e/I9NhVNQNhxdOWAiAuDsgXGoQLvxRPHNFdhRmJ68H9ewt7B0KdfnKnFGs+ig=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.9_1560818399380_0.553091921146607"},"_hasShrinkwrap":false},"1.0.10":{"name":"ts-toolbelt","version":"1.0.10","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"880f90f77a00269c5d4e4301017097453fbb2ee3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.10","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Qy9ytoaGQaG570/XOf4jjzLwEX+vGiI2GlFEYU+y73Hu3+7PZthGpEVez7PsLbWgB24Ff8aRELTebu6z+J7RUA==","shasum":"85b03fe6ba16c665eaaa8e1251ace0fb5be64038","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.10.tgz","fileCount":199,"unpackedSize":108874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCDTPCRA9TVsSAnZWagAA04AP/iznvBejgCqjI6vyltGA\nj1baIOJoBmQxWmERp0pvRrYJpT61YIQ6JVOFz+k+wxdmsw4Xfc6Pw8uvbcrw\ngn71PKnQK2HguJaB5FEiDla6Zf1XkWOe2Eizny5pptDHq/2OI4KyeqQM+5oL\nxBS/xHsUdOHLV62cwMB/MuPKzqc/QSUc+GY6Ge0WxN8OiI/myzdJfr/zYYcJ\nyREEVuWOAp6xAIqBTF6mfOL0ixDh7T6TZbr7ayDQDJjpXtHfrFIdU0v1J2nW\ndWIHvIpWc66P9+hhYmplu8rTzUeaNHRIPB1D3QOX8+Y6hIjfi7L9I7bv7wmt\njN/v6n+JulKgTNfJjI/BhoNwEdeytnki/WRln8u4OlyEtQnRH39pbDapEkTr\n7hLVGW9rwvY89Ja2Hyo7P0fg5hMkSd7rQvskBotq+CF+up5UH/Vl/LZibiFp\nSXGWV/6DRTlwMJ1mFK1TT1D2ia7+zRpjK0yoH2pVXaostLtamD58JyTcK27w\n18caXO12m5x0zA+doS1249Df4GqbhNOCK8mH3mN6gZxu7C7wKHc1YyQczeC6\nbkIv5R/Q205cz3atkd2nJkXVrw51dNaCpTvxAaTSENC86tijdCXOxzQmDtib\nHeuyG0yFngiWVzp1HcmruWI42M8a2sQTEIGy+SvX1HfXLSBDKVxKb1FJGdK2\nDZru\r\n=ltr5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQ2OQfy8BpECuZM11A97Xs6VzD6YGFpNTwcwbCBcE3dAiEAlryHDODKFvYWdx6rMI3aganZ2Mdq8TY49PixCXL3IZs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.10_1560818894567_0.7421307075887178"},"_hasShrinkwrap":false},"1.0.11":{"name":"ts-toolbelt","version":"1.0.11","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"1cb2ec9d688505b73d17e6ce8aecf25ea65a9c79","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.11","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1EdWY9112qF8jS5d8t7pylUUQ1mbfG8fTTkGGdB+MirSu3gzi1tsRWPqVtYREipXkmJcpmU86JcQ22zOutM6mQ==","shasum":"ea95468aefb628252555d13fb0006054bc73a0ae","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.11.tgz","fileCount":199,"unpackedSize":108870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCDW0CRA9TVsSAnZWagAA5BIP/j2CzSMSGCcFmTnU1vG1\n/nrOlZ0UbAuoYUM8WIdBX1yEf9ok+fe9xPmBRmlP5pWoRHJU6ycZyshB5kFF\nWub1MDco1R7ro+cI7tutm4GlDaVV+xUe/+Z0HQ1/qv5VXblYe87mpV8+k9Ci\nQCJFXiMYoK+5nmJXed3sVVeTEidu2B4QO/qAqujKALMTwNHxRsZ68HagotJp\nzYUOwzyozKgV2ZeZuIOqEDhjAn7JldMVaEZWHkPv7N4IypsXT2UReNJsB2P0\n6OJVtS3T9+/of1bwszB6Olhd6C3hl4ojPXOXhSLCgboc6zHNj7oOp5lTH1ap\nOkS4SLeX2qyBVBuNhleSgdlygIrUJ6jIFgLCOUYUtpjpEyFF0j7iZvcYvmnt\nZcppqsm1exqbBTlNLgIXAEUyw4Fd9tSDLkIRVzvRE1OTB9gzDvtW3pXRsl2C\nnwyl/iX2PmPxw+leC9DpMWNAt8hdSzMS9II4agN6BPeGrkNp69RMUVb1Bako\nfn6Ja4aziBztk4KBX8moCysqvJLCdKfUCN015d8clM3i7+bFgUhjaFURlESp\n871k4YHdaRl1YSbCFOEpQe9A3xT7rpV/oeMCWI8VtODqrq8v1eKgf2U77SEG\nnO2BKySaNjoSegF69ahoHe3Ked7CT8wwr148VMmq0Hvba2mPvZBrtTSB+6z+\nAAA7\r\n=FPgB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcgnBKF2QH7yZecody5Bt9L+i2Dvl5lTM0s3E25YTzCgIgN2Dd02GVgVuGDZcB9RUquWQWR8KlHz17a+wnkqRxz7Y="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.11_1560819123930_0.965702473475252"},"_hasShrinkwrap":false},"1.0.12":{"name":"ts-toolbelt","version":"1.0.12","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"cd1ccf6bd72bd7ad9a68db838264ef2a4b415abe","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.12","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZIdjtp8GKJAXGOp2k5A3L0kRwESJdlfZcU68C8wJkB9B9VENSI0kilGXU7l0m9H0rX5Sqp534MVAFuUQpHEOOQ==","shasum":"c494740ddf600eedff98bbb7b4bdb405dc010fd2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.12.tgz","fileCount":199,"unpackedSize":108872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCDb6CRA9TVsSAnZWagAAeiAP/2jpr33qL19FYbviPL71\ngdtyD9ehTHA67GvMYZvs23NZtjvgOq0uJPZxfaoAEZp0WkykzHZ60lGBjG1a\nybs2h2RW539Yv+E6fp4r3sUV79yitpakSsXxNWQtbj1IQmO7dAZqPTboYRUz\nS7P5Z4vTR6zXnC6bIOfOGBQybircJ9R7RuEI7SD3gg1v6H+5NO+EUppOrsQ1\n0yjFeKVx9pJhM5NQHJYFCDv5/35na6Km+TCCmhe4hWxgDSrGfyIZLuqbx1nR\nrzn41kTac6q8Y1B7rQLE43KmSkrFI5XrfA0fOHCxPGz4QOnyoaU/Bae/h5nF\nChEREZGCep3cC7GiwfZXlBJf6KrfnhDraT2r5vNqpPKHjRUXQMNy9rJ7hn89\nftDRQ5Dpeo1wrGUk1jxjoTEMvji3N8Yg712XYajyfOo5f2caROyqKrFpas7q\nDpK/en58fddd4TLQiVy9yCY+n5SRGNiSFEf/MKNEfOuCzZueDs+QCD0MZ8g+\nWf1Bb0Z+8N6rAXh/L/C9ZDSQ8aDs7MFra0eaxdUeQ6KsKTtQYn/fKdn9dPTB\nnGtxQN/8o2MVNLplRVz30D4dkA12ttfnF4OWmQW0Dh3vJOeZYesEguBmqMFm\nyOdCuRpONigUzj4dMZgJHTxbQiDMRojq8tISdZefCCah9uvG6xr+I1+tFFha\nUbHo\r\n=h5+t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBdh45R8LRDP0PqGT7Zgo6Gh3K02IGqEV827tkvVVnkgIhAN3ivrapDY6cyd7CZgJH7j3aTc9POSJMvm2yKvhXkLoY"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.12_1560819449933_0.14866141333390392"},"_hasShrinkwrap":false},"1.0.13":{"name":"ts-toolbelt","version":"1.0.13","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"8cbbf9778531e1f34a627eff2e7588f354eb6cc4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.13","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6VzE2uE+XwjkQX19Lx5voDKwsWFbAO6cdcY75TIN7RG0DLZA0YUd+TXoqSW7C90Ile5CqsjFvw6gmH1iHFDhIw==","shasum":"2cbaff87e65e35f5e26e670623ee4548b89c2a8b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.13.tgz","fileCount":199,"unpackedSize":108892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCDoUCRA9TVsSAnZWagAAuVAP/26d+2RHZzbeVzGZ+YVG\nXP2+uPPnDTd6Krkgrt144vnaSthSJVq8pRl0MLJgirhSQqrYrQF+Y2/D/y10\nxwHt6Zn/92JHaBpj+Ts7TRM3oPCCESJcGstAwq4htT7Px8BO55GOnDEzWzSA\ngh8phC1IjemGRJzrjXuloeFmGSBXsUULYAScN7FbSdH/xzpr9bRibRG6j75G\ntzwmp3hnoB2LITAKYtLO0Im8SbIr/jwdYtUK7WUqBUpNW39+6Dds362Ig+0w\nuN1O+3KmqaZY3g0pVA6iQ4kEniGnu1CS4eTqG5o2zHved9MSnXV/TQDjE0aG\nmJPv/ChmlgmHzBQe+Nf94VuPMqGGvMkLlmDhFOb7nLVTK4ovTSUk7mR1Pvn+\ny02cvShTVBHCi9UvxBUuNU+nZnSjwHFTC71Yu8hV9urTCFze/nxG7fYebNwP\nQzPtGAoqObmcRbypYIcWTzi4TiNsYEkwQiSDC37lNzUzIhYcxldFfbi45VfV\nDbgOvMHQlrPesGD6/nFPdZvSRSSvpoYeHiox7l4KNgRCkYNTZ9qyf6eXNJmb\nHWyOOl98q9pPPa/keRAnvPRAB6fyiGtxnq31Qc0JDIm1mhGOPrqXRPXeHCZa\nUjVy7d96qTBgpVWsJLMw80a+QV+vnJw7tUAt6Xan41o5CwZdxi98EcVKmmOj\n5CzL\r\n=yIA2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUMuEp8lBvk/kVimoUD/WnCC8Tj+tO34eD5eggEw6k0gIgTXEeCW0pVOTe2qf487WSTCSwKyb9kFo7SlDAJ4kqI7U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.13_1560820244219_0.8724719120073563"},"_hasShrinkwrap":false},"1.0.14":{"name":"ts-toolbelt","version":"1.0.14","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"4578734c516a0df28dfba2d418eff7bea9f79c1b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.14","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nT+ymzM2BBnoc4n1xnOcfqQ2+CEksvtX2asiN1P/lj5SMQOiP4NF22FXgDwiMkpqPtm+FDUg3zIOa0RAb0/TGw==","shasum":"48699f2df47647514f9081b7194ed7f7b596ba4b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.14.tgz","fileCount":199,"unpackedSize":109375,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOBJCRA9TVsSAnZWagAA9ZAP/0fRgDDu6dBwuhWi7luG\nOL/CaLYh/Ou0K0ER8pFLkRwVsfuS7myRD0KN46Q7XVPyXVTQciWN0iO9udv4\nqG0hlgCwiynaH4lbvcMDFw8Q54kpGwFdkfh384lC9j8nXhYE8YevqJ/qlst8\ne0ujnvfCwfh9514zlcUJdFRNI6TJ2urE2JhVbMZn260ZYNX3luPX3l4077pe\nycbqXAmBjYGscaJhf5XKmjETkHFcUldQXXPMF8xccValFvPr8LU3Q709aLja\n1lp+AP4l+pb+5vbQS/XonGpk3hzg4kd8uWDlGknaYyoDjTzMNnk9IWTgk7A6\nhtrMlgYRfFOiThZbn+VE7+/TZjt+AG/6hPWFPEQPABPLmPWut5laDtCT1y+y\nXjeZ8QkWh3tH3BOt8AeQbIz2Ld1wIh3lx/5zSRbm834h4Qpp78ju9EGk7y2a\nh6A2wb3yR/vxOo3ErXpcHk4IuexcMWP98d4B/+E0/GZ57cLXAY6OX6lND44o\n/veEB594mTjdCthJFn4kQo+hdx01xe8o97hVhkhoep34SM+clKEltMb6XykB\n1pdZV9MKo5dxOBvOsu1jGJHRW0N3uQ2PNYFKEQ7CHCCeC1VSaeGcQ7P8G+ur\n5IAd79mB9EgOo25cVgA2z1yf6CTLN6fF5+jwLnGHXVrjdsVpej51Hqy6hQGN\neaVm\r\n=zzCo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJQwAlguK08ljX4CKZv4BfuTTZRHZfSg0pFkq+Xnk8YAIhANxRIefAl3f/3vHdELiassHsom7SC1Sw6Xyrq9RXDtNi"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.14_1560862792679_0.43398836961719334"},"_hasShrinkwrap":false},"1.0.15":{"name":"ts-toolbelt","version":"1.0.15","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"c82f13a50bd91c23cb91303b069118c4ceb1348b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.15","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-mn3AS7FmQi/bSTk3LaB19rfcf99XpT5SXjLxkLeCjRlqD0PcGq4LcA2un2cyrwJbhORh+QbBKJiUCt+IEsFcjA==","shasum":"7802b4b6808aadc898d53442105bd98d75504d6c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.15.tgz","fileCount":199,"unpackedSize":109392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOEKCRA9TVsSAnZWagAAs24P/2Pf4e8JyxREYGyNH/Fi\ns68gIdrqdRpn7GGGBsYRvtuhWGty+TUnkH+hPedVNW20WmUo6rJHrhQx2+eP\nv5Izi62cr1RqUCX8WtLQvXmVA0WHeRsn7usbIB9cxjUsmX5ww1ukX5qhKCiD\nkUiHIaYGYuZ3t+gdRVMYB5YhQwT9S449RLsD9osQlYctQGQpsQzrc419HYY6\nvIKOVJxDeOOD8fy2pMzPJL5d/FAeHhk26f7TPOsg4+jvtHyJ/8fTHn8prqRb\ngfLTxeUTEGFaImzXczk6stnQImXBPGrlxR9ZuzCBtGYbMDi1eLHp3oG5VFGI\n/2DJU4AvLlz3ppIXQdr4L3P4n0nSun/Io2S9JCy6n5VwEAv5gOgu8to6uzTK\n4//hhYVsiQN6CdJOwu6bFw16eEurDb3Rak4N+UXnNbieU1xKRSKVqD+dX69c\nQRc1ZvPwFPhUMD/1TBuYEcScOlX3avnrQ54XHTWy/Zy6hT8zP+BW8BT6nTtj\nDLkcwsCiToYqDEE4IeNsgTr0LLboEMC2hnsLmwJugtkZI0V8RMUwAdU3C+qD\nEqrL0eek/J6k6oANDvoeNwA9mIcNFtRH3yRD1WKfdvlEAT/ucfX5X1CpbUcz\n7xWxKyAjeSgHkY8HqpralrxuQtFDcQhWMVfH7MQujavcYQKXYcpoIX6bzYsh\nhvPG\r\n=PV/y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFiAQth/VjEyhQirfASApL5VjYlExnZ+cc/3g8nKNrJNAiEA4hYyQGBED/E4bXnCYiJzcNXo3PmE97B0rRENxtvWbsw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.15_1560862985528_0.63996735299842"},"_hasShrinkwrap":false},"1.0.16":{"name":"ts-toolbelt","version":"1.0.16","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"44548dee3f48f686bda3d771083b04a4d44dc41a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.16","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-S8qxEQCbZ6HI+ydtSesyxMz7Py1ipYertlihjqb0G2alegNjwMskQ16bu59EHNCV/NN2sNdIyoGkpa64vfQR5Q==","shasum":"03648bd6a38ad2d0732a043766ef8927e15712cd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.16.tgz","fileCount":199,"unpackedSize":109343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOH3CRA9TVsSAnZWagAAc50P/A46yv21s7hPtUJ/wCTu\nsFaKYgWOknx2Plc2ITzJe3scyZb2pFqyTd77gRNwg2HNEqMv+wKmFCgG6PMD\nINDTWd4Rj2p1RC8v0pChV9deXdNc8C0zpSTNUOI8qGszeapuCd5lH3lSkzYW\nSu3Q/5BrvojXHBQ4z8smx2HKtnJA5guuojWtKuiVzS1ppAdLMRn+UyQ0Tq4e\nZjTcIbxdkGB3OwMfoEkbyKJbGy3sOjRreFxqBaP+bPZYPAKIWWbZB0WDJ6uP\nEN7rGfpeRBtlW3Vnhpf+9p0uKbAbrwBaK1DUQPZ75S5H5N4K31YGM5WoqoZi\nPM6o9VkJfgjxdNmUD+Z0bT1cOxsqcauIeltoeqLE6Gpod89/DIIpdx0BizNz\nt74wyU2WDwCLqGjGX/aS/jkIa7oREAiV2uH3kTudRHaT3h07eTIVFC/uFVKD\nhytAIE8dDX3ByCs1drEoTdHCxEbbhtucDKadAKh7TMgh/GRAcnjACo7czDyN\nWM4zdebvOpyRlbjactng98saR+ls0rv53cPwEr7EO7SyLj0tcZR/4ERQ9O1V\n3j1ErduyRNzrP59VPzp4d1+BhArgDma3xeM4UzZF6JAVEiA8jJ3pcdSBZk9g\nWfvIb3tV7CYRII4Gt8TNq/quSHV3nJFP7pkXNnzitvFXM5iFy15XZmAUXCoe\nXmp0\r\n=toAc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIdr8XzkXms1PrU6xxc3wSIN2PhuxwmwW7OK05y0UqAwIhAMTN5yyMXzz1ucZcVsUszxhaqnqoBFtSrvD3XMRLM/bk"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.16_1560863222905_0.7928677116013234"},"_hasShrinkwrap":false},"1.0.17":{"name":"ts-toolbelt","version":"1.0.17","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"42c561237aa746a07b4c641385ecf612e4ed38d1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.17","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Pw+AsCTm55JlENtobxXLmaNGNgZvWHWEB7BeJXgeW2dihY+22XDsleEyx5goQm9BEnAV0GUkr+BsMZk+IoOJ9w==","shasum":"6412071dba520428a430e0e4072203ee54a7ff6c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.17.tgz","fileCount":199,"unpackedSize":109350,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOLfCRA9TVsSAnZWagAAZG8P/1/S/vvu7OgRl6rKW3ff\ng8eCQ2jvjuc/0lkHgViizaDC36mpYwVQlYZldTss5BrqrhGFQhlPcNGyRzvn\nbg4cR/Y4Ilj8pSErdTlzZha6lYqIpxMBKyC/Zn+OrW+eyOBqaBUoGVgbQD2h\nmqpe9BH4gXIQFTj0gIyY1Qiqc3pdWup14+FwI5zZmk2jrKuGUNClZYGk5RpZ\nnBGHC5ouO7H+NIwG+TVqOOCS9Z2+hWR7F9limM7qYu7lKe2yiXLCzDxygQ6q\nkEoGrt/ngc+5HAbvXcsH6csi7ShWabOMtVAxAnnB2pJFT+0xFl6wMb7TzGhC\nmFKo2mV4DKioRPQfHmYMkljPHo7WeLpWET9+8uHwCCg0F4QUAoFQR1/SWDYk\nU6/tTnf96FKwPeHDJ0+cqRpsQdbD0VdzfVxf6HuZ0/cqBpLdMA3Nu+/pCDub\nVtxg1uUH4uV+gKZ34J8ZuY6CXA8Y86gSqto01lM2sgeFFwrwVpTiD3AxSuhw\nhwLFJVOLjdJnAUPbq9RnYFJQEvrHvnX9K4rx08YSRPVuqjrQcJz3/13/60/k\nnSsiA7uijgeJtB2kgjIpqz7PLwLgXqXs70kP+us0yfVD4l8pkfeGV0gutUbv\nfPLqOU3VQB5dmgUxWa6cQl9oT7+QsAx4L0Na3kIvdSZZsQD5fIw9wE0Z1nIU\nu9fx\r\n=x+pz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICcFgRNX+ZyuHhuK7fQzlaPOEoXyr5aO7uifivxavjs2AiEAgi37y9FGvSX7fPtkXUcOZC1N0YoGmlDdn1Q3e51CusU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.17_1560863454830_0.5178159088526375"},"_hasShrinkwrap":false},"1.0.18":{"name":"ts-toolbelt","version":"1.0.18","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"302082e2d5a3c740fb1073e4cd97796c42a9df1f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.18","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FUdE46mczvvpYkj0EO9EStL5qx9st7f3Q7v1JiOjD9C76Lj/hnSR8PxoO+/q2mWuFWd+3glswzhwHILXo/12Dg==","shasum":"d8c909904eda4e2c4357b93803e49f0aa01155ef","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.18.tgz","fileCount":199,"unpackedSize":109417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOOVCRA9TVsSAnZWagAAllgQAJk70mBqEiQTufAZ6K6b\nTxQYu495afaVaKW9tXKAQ9CyROO+Y0qvZhH0Uq5GbS1Bc8PX9OErDfnZeCq9\naqXDG1jXQcb0kR0rqnvLH69WLIxhIMSFc03DiuFcQRNTRPA4sWH3bMaWNRrx\nJCyS1eHcSdmjfHJZ/TuydzSb6x4IyxnUqQgBHXA35lrFptduUFUWPN5cCt0l\nEajx3eyw0LL4REditCdAOxt++8DLqQ/0sZyotRvhBZIAQ/ME/3kqWqIAVk5I\n5x4SDiazKksYivdPuG+IvQD6jJivIch2KE6WxGmww3s5pXOtxITdKHSMu+ZB\nxtzPQw+mKTQZ0YzgTu9OZk/rONDt6iF7S6Abk9Eym8WqiqRMm+Gr6tVkysvY\nmjh9cLP8c60f/HdqU49W0PCrguH8vbLSectrjmgBExY9roCbDEy6wfZtxZ6M\nNbFrrJ5e9XuzuyQE+wxcvkaruiEv5HDT47Dj2coW+51Rjill6uPOcb4kk8qq\nZESYzV0isrkwbaSDkHm9C04xX1A5wEFpSgEHNE7BTU5YyXVElk5pEm8Au5+q\n6eSkOQou5sprVaXyHhS4RvcLErCsteuieUNQJUMrRsLP6Z7icj8MsX+qWX3c\nZHkBe0yOdU7Y49lKp8Eaxhjr6xs9o2M02U4G6j5REre0EvVF5KHclIMMVXIt\nGBM1\r\n=IHRJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBmrlz/oJNqTTstfE1JDY+v3RSvwoRe7Mu4WeV0kn2eYAiEAkf39LFSPiFNfwIfeZv9WzfM0lFvY3O+nWfqHXPL2+i8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.18_1560863637024_0.3858293883579622"},"_hasShrinkwrap":false},"1.0.19":{"name":"ts-toolbelt","version":"1.0.19","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll","setup:dev":"npm install --only=dev","git:push":"git add docs/ && git commit -am 'release' && git push origin master","prepublishOnly":"npm run build:types && npm run build:docs && npm run git:push","release":"release-it"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"50e33271d2d613e8b36d79cc1c1d85ed10d449ce","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.19","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IK7L5E4upPGwLTij+zMt5xhaz2WqRRAwgzHIzFNbvdbODKYiEb6c2MHGZ+edtFR5iR0k9EoxZMjyA7ue09pv2w==","shasum":"078bb89071657225d174630eb6b06d8bc731fb03","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.19.tgz","fileCount":199,"unpackedSize":109527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOXJCRA9TVsSAnZWagAATroP/3gDkonyprRTeBjFxX0d\nlnJ3i4m0b3kXCRwIg5dZeMe1pGJAUdxUKwAXMFg/tJ1k0XqzPWKRvjtkudqT\n9D7I/FX73PVSZHSmAhgSZyIFzdkweXoTckqSzVDdnupwmbzK3wQAZkjbaiyV\nTzHQd2/nnRGuGIesbFX/dpEZq3uqAyw+yWDHiNuVACUekI/6+daCEYE6weL4\niMcjGdy2AIGbWWIBzj3qvLAqNJyxwmD2k3kTqMqhOd0+Zonju7YPsGQk7MJ/\n1tmTG0mCrs1RG+16Tq5c/ucACMJhuBMTtV8yvBdm81/8BkVo1J1M0pcAZzf2\nj5CKZgRph1hsVQM6Tbxxor9apCLPs3r7Rkf9eP9D0oRC5DS38lOGOGj+mrDM\n5OH6IBwVpVqPtCf/0HqhY++QUlE6LIIuu5RHg0+G/CX/U7aBL6pkwp+C7ijS\nXG/UNUazLwv5oL8FrC2FvLL4iVzBgBCTMubRk9VR6stQTE7nBRytl/InmY+E\n9wVNTE4mqGCr/XvJ3SbQybdW0273zjSGHGeCd5NbIBpJnOOcdVe4jKV9LZBl\nCvNc1qk8k+L0rjK1Iou6tFEn3pRCOxYCABUFtN5Jtsp2QOK9MBEs0em8Symg\nWDiBZYWiOneshb/eQzIliCnlN9eDJ54K0ktXIjPNACHBwrm2jqOniEUhogFs\nPuYc\r\n=kndn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3XL/AT61DMDKE96Xsm/Hg9ADbXIr6EB7A9K+Pcobz+QIgeBimLFrQNpD0aH3h4Iqt/Xwkv3cc3UqpzN9W0ecKIkM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.19_1560864201170_0.9834707118833206"},"_hasShrinkwrap":false},"1.0.20":{"name":"ts-toolbelt","version":"1.0.20","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"cc483bcb61d6f9c9350be10fc5dedb0e2569b9d0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.20","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1Ud0jYZRdSxI13u/oE9c1Zsawhb+vzNcXeNHUVYC6qMJXmIF1F3KXh0obsdzqffqf9jzDJifAykVxmsfj9oUmg==","shasum":"6dd76969f323efdc75667d4c0c6572172db48067","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.20.tgz","fileCount":3,"unpackedSize":14603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOfwCRA9TVsSAnZWagAAbZoP/0VexsYmjxPHbkAB2kEE\n0ERtfzhCOoeVgf7HAbyqmV25aSvv2U+l2IFHI75Hal9ffgZaxz19dhtfClL9\nOhjGPS21rF98B3AmDvBtBhUorTpp6Odak/upKCwzUerw5y/9tRL1QgGuZp1I\n5VTRN61T3s+KtlnvlHXUCowXv94HE8+7w/4Nwmy+sNDPBBAUOonAVT8A5uii\nysKQ9U02BrdGGDBhetfmDKITVDA24vtnYWr+i+MnaCPJ7f193rEJ7FHfCJ7+\nF7+xtBIWOkxt/dvfwAlHyXLCT7+YVJYU7XziuQLvpkx2p8yD4+JsQjbjTGwI\nUSYDklM/cT1lGjfkXqtMpRSu559mXPb1LfsQvTbObdYMg9BFz9vPRghru0OD\n6sAQVd+871DYoClcezfl2b0xzkVnrGA7Exxr9vxtUxdJgk4jHEtOACDU0q2X\n81AKcoRJCcS5KG3Cn4DWG8QksCJ+I7ubyD3L1dwXX8aCHEc6Mr3al/2PbynF\n5sX+Zr84t4lp0njXkcKVWh2MtWFS0eEqLk9qyCm61krFWEUquXzpzHvnpJc1\nWkSeCrEVOGlVHW5CHqDVf/cN9Pbv7JGYUlUt+MTcBbrFPxpewwQV2wSYjkqn\n3cObD0/07ZlLRiU3vnbOU6ip1d7VIgvhKdXEObbyZy+AjtLTCLxGXQvyZi8c\nOqna\r\n=Id8V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFV2cjnG8Ogy7ekbotSajJuqqZEK3s2FFp3PBfNAFb5GAiEAlH7WSLzcXjfKcX/BU/Aanj+5wfs80ReydN6CokoG9Q4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.20_1560864752320_0.7811396253554108"},"_hasShrinkwrap":false},"1.0.21":{"name":"ts-toolbelt","version":"1.0.21","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"ec8482a71743ce9ceb996e6f7823342f575bcf5c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.21","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jFVq+/g9bJgeCGM6DLXQfVXqeFkTDS1JUjEm2+EQe9su4MZegl7ThfSWiTfsGmL8mdvULWXlO/oYwdTVA74jcA==","shasum":"68ffce8c607d4f337268116b07bf12540ccc5b4a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.21.tgz","fileCount":3,"unpackedSize":14621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOjECRA9TVsSAnZWagAAu14P/3zmgld3WLor3OUY92pm\n+JQlk2no4zI4THqD+MjN88OM6bbti34sl2abolKsSMxmTObs3/V473rcy/UO\nBCsIpPmWHFhC8Ys0rk2W+b0uHp9Z9+PbweMMoS7zAPke4xBTtvVpw2jX41AI\n0VWElu/6V5jy0XBCf+NnI9I+Gr6k0S3yl5If1KKhkQHce2IwFu61OLq2y+gk\nn+k+OhAwiw3diBuK2oqdYevQhCGvm1yGR6GyCjeFGEwl4piTOVWBBmBPeODB\nAoK73+BCNWkpn0BOCc3XFqbtPk2Rj1+kXE96OgvEaTp4pM6BL7NCpgt1zcT6\ndd1NpeTsM4Is+QxK8FjS4+AqqBrmHCIZQZOMTqfTNTWEvQCGWqWlTnlaDEw7\nsT6BSSDNTp8wkho+g+wnO+NRWG3GAiYhJoDhRuYSNrCkyrrFMjHMOOQ3hL95\nN3PamJmWdCcdADZ6IxqUuTioqcli7fc8+PEbm5rccNgGdxjDxWnGVW5VSp1I\na5NusEaha11Ca0WuoxADHoUhsS6cvyFFWYgjUCwonoqd1u3QSehyyb65VzZa\n/FBz4tuxi7xNu9T3fwMoKjOimdrTQ/hmaYwsjeMuPDsPw2gJ45PKok9E6Gi/\nlOqHJ75u+sRZigX8urY0Xam7rfXUKENY8CfAPLHPFzzdl32XYqqjCWxx8NEP\n3KO1\r\n=FPcB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBw3/x+d8VUpXXd6Lm1/WuP/L35+QoeC+e+86tahYNisAiEA0ahhh7aV6L6hfJAG0gt2lZ7D9D43cJ9ybGT5j/c7GwI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.21_1560864963651_0.3759852281235663"},"_hasShrinkwrap":false},"1.0.22":{"name":"ts-toolbelt","version":"1.0.22","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"9f19e47082a5fa6ff692f1e8e68c1eab41b76f32","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.22","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fcTWfUw0Hy9XDjUu3A6DKGo6W4Q+aRBf/gS0k6vKekOeyzvzvCu5/bIpqvxwpIGbfOUJlD0vIz+T5UM7HLjGYw==","shasum":"333d886ec1588c7eb387fb26259218967e7926d6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.22.tgz","fileCount":199,"unpackedSize":109687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOxXCRA9TVsSAnZWagAAJWAP/iYh2Vw8Up124xZNL6bs\nK88FlIP6/lZ/qd92S04Rt2HleyIxG8XIyRPyke03MTwZHxoPYfQyybhbxd3v\naFTKMnSa+gs0yfEN+sfMnM0KYTKxDG32AiL4KsAPDx7aWy2DS7DPxlmvNBuR\nUnIfJUmS4xhH4NiQ+1DBSBw10ndAMQwjGhd48ClIKZm1WyyvlYE/gxeVBT2t\nBF4A3WqIhbzkqJQERVIpXSKeZwHq0juxJFNY51puhNCEAzbYIDW27lVXAT7L\nyo6MRgck2I0g/zHv+pgqAlb6cBlvbKC4K6ityDhLZGgTsjp1ODGRiv2HFTBE\nTzYMpTOQkxk/qAy10qOvNUlLVJZRB12ZUdBAz9jvSP2G58q5IwZNhoCjPHuh\nocOzA06pknuY3MsH/d/Ag2mTmBBfSLEXMtdSrHwnKJ6Vt6IdZZpj66oVmiZ+\nkUKGu662R2i4D/Fgh7WwnjWYltkj7JRH/inr+cdi1q9F0+TN5G+RJD2Yp4Xl\nnzqi0QpLALIF/fWWqrlchrcHgd0lS1TwiK/RD6reZCrNoW+uQjnBYJVw6ZG3\nLmLRUHFQ0Rgbp3pGjzQXPoo9n2cgqDVqw0EnUEjejCHAPU3cuYf9HMdDGSxl\nfk/nT2GWmRjdj7ifuPCdU8O5YgLHewkeXpDCg8FkFiX+ZfUmOekWxfexNOJ4\nYllF\r\n=5I94\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4zu7AnOPJrMFqU7ysJ5BFMYKRMzIwPpbmqnq7iwKPUQIgWUwiB1tSGzdKwNuUNqs8ThUoUw91iyb5kdm0fpSJZrQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.22_1560865878630_0.6982245115170849"},"_hasShrinkwrap":false},"1.0.23":{"name":"ts-toolbelt","version":"1.0.23","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"e5c12e935f6f237b2c3d99a9462d85514691b98c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.23","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-s9cb7QRiKG8OrBdwefcxHWWtO5A/+xRFTMfEI2tQQWOXTca87HFkGPwIDAucEqVpVgKWVFAX1EUCjsp0ucqXmg==","shasum":"8047aa0715d493bf9e2acad3641b76ebd8f9b984","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.23.tgz","fileCount":199,"unpackedSize":109687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCOytCRA9TVsSAnZWagAAtXoP/26oRUwQPomGNF7XR1Ln\nc80OOntA+3QqZGD4ub1NMjJ/iR2b5u4ciwlTpgPfIVMObR6tUGJEaG6SH9Jg\nHCFNThKRWshkKZUG/QnOJKTDSPaS1fGs9oRyWHq/zVsHVZoBU/1nOrJMFXTp\nx483mdPCPjtw0kqnLoqwgD6AGW+OVGzux78pU5Bb02cAQ9u80cTcCwjU1XtR\ncv/Enho2sNuCgmCJ96/LT4ewxGfgNT6e/kUGVOS6nHJuE2mEs2tfWKymaRC1\nimELXncWkbELHFhIH3shAb9N8Dw1ArChkoaW3rHWf0ZvhV2WoHhIxZtnhVEu\nrzdouq5/pQ/8ajLxB2pdwiRcfxTOlNl8GcAalPNTQyFmQdzmaQUp8P5fEc9O\nX0XEZJkXXrzjaYuAB6N284l4STyn+RZlqWo6WrGKufhWYfLJHd0Z+V/nEtjR\nllmZ9KccpNJ3uw/DKwuP7yqaD98Gjkr+LRt9qUV7AYYVZFvZp9oJEf6Th0Xm\nDRw3cl1BAXVGk883HWePG+derkb1WdEhNP1KQMxgERzZq/1Jn5jOpjNGfNHD\nzXYKzTDW7wybdJJxvDgKovzRBrbrlUjXskSLJGsNaGeamBaft5ImS7JXHi65\ngXOfVeZ3wcufVGfZ/0of6ihUbohAsfR2ljgaSF6oywjUQtyaik2bNOWNiCw5\nII7X\r\n=CAQ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwJGBK7JK9tigFA7gKxsTMveuuGKqBI2CNQiSREvnM0QIgb6wTtsef+NKCMFocZPGKMd1V+A1fER2E9qrm1CxUjWw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.23_1560865964699_0.20427718013254048"},"_hasShrinkwrap":false},"1.0.24":{"name":"ts-toolbelt","version":"1.0.24","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"62e2dcc1e08edd1f0ac41642e9935a00860287d4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.24","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Wi3VlZ/thWTmDFAFGlt9cpFXpNwikA/FF0sPstmyu8YMSWQyHV7ellSgc2KjXCg7BUH5svCtxc89hrsLo1CLOg==","shasum":"e00b9882e875ff477f4aa0beba942abeab0a4cca","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.24.tgz","fileCount":199,"unpackedSize":109682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCO0kCRA9TVsSAnZWagAAYD0QAKASxER4/HDUOWUFp85O\nlseyd5ZACEWtB5PKg29tpDMhDeGv07Xfnt1fnRw1tNoxuXrjJIbcaA0xt808\n4NOFq/EOIXfwxKjgHYTdz+sLt1N/3UvSaFub+GAtdOdyqm2RQEHbDs2roCq+\nNrM1VelBLGE96Q7EtT3pEFAIHC0G1+70snqEaNXOfBNnp9KHgMPSV8150t9W\nVlnCCv+q1ZoN0aI5j6zFlDyvMxgu0FDKuHW26tYeRZ9CNEGdz42PgUbiGKFo\nJGKkcTh0Jm10+0kF2hnXHYTuajbCHZ2Su9tUCMp0P1K9YurBmyGFobN3tG3E\nGk6W8P13RWIIoQWF0qbg2POU24RE04hksuO/c5OgUnhGMz3voqLVxu1ot0lv\nB+MBDAz55aVNoJ3zAMs/JpVcMXWDvD9f3W3QM1BVprY9vCU2/pb48HHvJTr4\nqarnlOmCX9iwORFII2shuq27tNg824U04kdR1CzTup0nLSBU7EXpCgF/gm19\nODsuFvEbLy2sm5Ig8ure/5lxIqEwrIT37OnaPFzHBYkxVUtcfycL3VQdZGOH\n4Dfj8Y3jwnih/+pUSoKu9iM/k+37vI8ITcBmtVmRMxwbW19tky66wxiut//V\njbMljDHytj59fxgPcxNbx2Uh/QyQCJxFvspohm81ERQU0V5p7npeqMvY+amp\nWl+t\r\n=hYa4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFOHdVLkNEDMT9n28m3IcITmulg7MGkM5uMimyPS2CEdAiEA809XDIGKlAnqdrhRnJdrAtaaLu89GbamHTgwxBoy/bU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.24_1560866083901_0.2563252479821696"},"_hasShrinkwrap":false},"1.0.25":{"name":"ts-toolbelt","version":"1.0.25","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"805f5c7055d6f724838648688a77523d7c2f47be","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.25","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-JHMIUHX7ar7R7oBuU7I8qj8ccO4zdEyWWBVbFYXD10sYeBvMdRu2J+rUZI0RFWtC0IovU6cSQVZfLEm/nDZJhQ==","shasum":"94fb3f3b2ace1142f0ed5ae9fcfaabae8fdcc6a9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.25.tgz","fileCount":199,"unpackedSize":109678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCO/xCRA9TVsSAnZWagAAZmwP/0qi9/ZYU/OhUEyIoGFF\nn6uAxJUeLyXnWdwGg/QKqLkuK8wnBgdMMOAeO2wTDhF3gXQylUdv4UfjEPRx\n4ieMjDpwTVjiX40g+CRrSfgiimkMfL8LLJFpbxIifkx52LIiz50y/DhFPq8L\nGc9vrHsneoc2KUWJwfEWUwJwpuSZ8ZijhwIhGa8LLcKHc5SNZw30Qmuu4mZC\nMSX8tMlYKPeugzIy8SdQrUhyw0u3n7O9Q1sWcbvq8DxMZlYjjbQwnoaEJ+hc\nMSHZ8tP7TBre4axC4vqslCXsSbyDUS2IWZrQghCcQjN6xfHh5DyI5KP9r9kL\nuCuIsIRTK2kSsR28bTr5qF77GtxPCxAW2UyhYwVEjfjD6Sm0sNGnhsbGUhRt\n3nN/c6IGcrtdxX7Xd5l9reccsXaurn+btN3a+2kSYbtiXSnU+ialfBB5nf8s\nvgaUK98I/BTbdqpoUvGxfJNBhlbb3nJUvTlGFpKW89peH8Z6HqinVfb8v0pB\n/NK/cpK6aHfZ8IF4rlkRWnmycXpedCfwxTxc6STEkJZ2rrG36g4rfSeersyw\nIUkwdxh39Sko60Q5SeFfuKbYuHKi3SuBzB9fQ5ccXKUIFA/RcSRH1snb6d4B\n9uGoGN4pG2uSVSsU35JQ7VkG/Tkfv+e9xVfwaEQJUnglLZNZRb2/9j3ZQOsS\nJO0X\r\n=WQGj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf3e6x7dWyM+m1U7WvIswBocfcvwIW6H3ybvoBmnO8OQIhAOPSfsGXzQjNRm/KrDi/RSskrKLGrJNfnC3MrvoS9A45"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.25_1560866800756_0.1223031454043857"},"_hasShrinkwrap":false},"1.0.26":{"name":"ts-toolbelt","version":"1.0.26","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"1b1ba41e9c3ad13c948db2e6d883cfdaffbc65cf","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.26","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-KquDYWIDOssw36G4WqGxg2s6SEuHM8ElIabCTUSRIR1IpiKDFoPqFhJpLU082dOAH2i89FgWZc0Wr5rbY1mJUw==","shasum":"cf39b286a44a4df66256c6f72bca8c1a568f81fc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.26.tgz","fileCount":199,"unpackedSize":109758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCPDECRA9TVsSAnZWagAA50MP+gM58KIxIq0rO5HO9lGn\ncVFGnGuJPiDuWkQT4oRRa1SRyDOfs7ONTDlkfIEiN8jq4R4L7N2yB7QnEzqU\nm1pehNUfdX7w8G2aNsyyrCIVdveZivZG1FZijt2lwobSY3uv8XQPxVNsg8ll\n6Eyy3FZ3iuRW7nZNOT9+xbIXC6xiesacaZGqLf2dv290LhphbcJj2fxxKtLm\nlcx3y604tQt1uYet0eMk+Zdx1zq5U/rdRlcS8sEgX9lP3I3xnAfG5FxZqmhr\nm13/SNwz4y5iCW+vkxXaONQRvGfS6NkazIxpIGr0p8f+MAG0Jg2MrhRhR0Yf\ndTL5cLg/ItmLSiJ4yRyFkm1UNkr1oKN3rQaXW6NgxAUBEt607R4N/XOc8dwr\nQEpkATsWKZQ87RnRIWKq00aztV3GGpN1bD2aVb20HEvq12QWwyDrIDKudKTs\nrgwrXz1WhZVI46nbhV4dmyFpHhIEKcy970aLVx81668ZBpRYKGMlgeHl/jA9\nBlmYTgf9wG8wqGfy74QQrBPk5MynMAOjLBdXobyekSIJe+BOz5E8p4KhciDH\nJgfiH8U33AAx1MpqgwvdVsJsmzsnuLsHJZMgZyNjEDvOW+RYrDSTuVJlhL9O\nLTjznm5SCNa7kfR1tYQA0hfbgbD+oKe6GfY4PkoZK6ekGCSNbpalzRTznWLz\nSnDa\r\n=B48+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHhSaF3OxiTfeZHjWQseyzAUOuJaL1fOzlgw/4K/xKNbAiARvh0WIPqZLK/AXeD/Z1Djc/CdSrStxmRuT9BfwfcLcg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.26_1560867011722_0.9064405443442871"},"_hasShrinkwrap":false},"1.0.27":{"name":"ts-toolbelt","version":"1.0.27","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"ff9d470476fedd65984aa054de2a42aabfcf2ea1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.27","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-dHRfZUskEp6HBFKhOw7BX7ze4j+HnygtqHRFLADm5dIpqrBqvkcLqnaCWdbnwX08qHEQWEdjaMItp1DxqQB7VQ==","shasum":"ae77d9c8c3e5f8eb170cd50459202a6fc98c4ec9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.27.tgz","fileCount":199,"unpackedSize":109899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCPU3CRA9TVsSAnZWagAABBEP/23mer42Q0PdBYbjy0A9\nfQAqZpEbhJKsYdK7nvfkVRDDpXew4sNl+i9puwk5UarqQwHFB9CXKmwIFSQK\ne5Szo6INhCtHth0mu3KR1QWjpKSM7P0ULFGoKq1DtDgIQeYil9bZtlGkahOw\ndQN0rN/bg+leAxgGMP4GmcnGf+42DUJ0w3a1ifIZXI1tyVjQ9qn4O5u+ggBw\nWA/eexkzrd2ico1DmSyqRXw5oH6/fRewrS6GtauiS2TuNBb29jUocdwwpjJX\nUOF0RUxbeG7+/5qi+QDtzz/8yD3daSwghM7HMva4a7k7nkhyI/7+YNPSCKdw\niW5MJkdO6ZDbF7LhrI7wHLBAJuj03sOxsOMu1chKAkVNVpIoa5geDx+8hvY5\nh93Zfz+DkDS0e+i9HQNi1PSvM0e8/6kR+JTeXEm7fxkci1uQ6RDxA+2QlY/R\nPQGje1Lg8E+y85tyrycfmqF4Gsd9w88QBxXt6KsF9vQDyq+z+ghib0cY5EeC\nef9Erksh01ZxmheA9U74oLtIIZNmXCyoAfB4MQiJUWNWmcGCa6u+Z6gCZhQO\nLfqN9iMCqZ+VH3PlYu6RVZxS9bYxkcJozJV7UJfAeLV014BAeLrbdCmPw9fB\nvK6mgEbPjMJ+dpCVI51SxkPvKKz3jFzp6k83q9QpT94zT2FPIy/0Td9c+D+5\n2Po5\r\n=3DH6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDewgzHzHDmzXLglpCdw1IPdZAQ2WI6M5mOemzCzv/05AIhAJHlWglELtXYFhS550nJQcQ0TT+/tdFKuYUaiK2Bk8fe"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.27_1560868150750_0.1449526916075139"},"_hasShrinkwrap":false},"1.0.28":{"name":"ts-toolbelt","version":"1.0.28","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"229008b881210efa230e3a24817279c09a34ff21","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.28","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-eT6mqr83xmGuBogvZBKOT+XBQi+aWVYMEXVWIp+NwHDUlxYQgfUpDNSQzvjydTmy80Axc7gQQVKEuZoixwfOCQ==","shasum":"8f757d585812c0e907b1608aa17ac6e36ec3f457","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.28.tgz","fileCount":199,"unpackedSize":109913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCPirCRA9TVsSAnZWagAANGoP/i/rS8zWnk80hDgSX3VI\ndxvYVzXbJmJYRPKCUj01jMv+c8pBG1CrAQxrGFpovgQ3er3cgA8KtzNEgNqc\n53OGYgyb48hzhwzCaVKc42SJUBTk7bQ6amczx1RfW4Y9/hI46NEPcX0Floa+\nfnLyGGIoECYIdsP/Rc89RzkvstyNpWo032aN8XWf8Y+JjFhFpFZib5KTksiD\nPVuJzZu4IIQ36hMFYiBQqzX3BExQ4Sl+zQ+Cxco+i+M9llC/OxzrsG/vDde2\n4OcLQDW+bn1fRxgxJFIRre6GJ30ODcXiLG/GxGfHeX7HuhMDTxWJyFwDQcvH\nbMqH+Qt9Be0wfvLA2kz/xrrZig7dgazlQ5q9w/RFVbfNH150WisuPmHZpQDQ\n88YxSQGqZiN026+D1lbLHyXEdLyM8pPbZWXmiB/kjQMxV9x+88xlTKi+nhAJ\nv1CgbeNwm1trlcE9mSTV5FG++d7I8DWHTy6yVSdbsn5SX5U1g8GuHZmG8Oog\njGkdR2Kdl0mc4SH7kpxmwtfpGFCJl2jjaqKuF6SRVhGniykWd2rYQ+7K338y\npIPV4UVGjvuYC1D6+ljtIAsFRgI8ghSHWyzGe5/ZrExoQGlQqySL+PX8wDfE\nG83iosADblMWwB6NKoU34WysDlt5vNvkrpZeAQSsROt9w5P1wvUrf59Vzy61\nk80r\r\n=nBVk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIATtedV35t+pTUYFIt2sIwfWvkAf6AevLk84J3EXjgs4AiEAhjttEOCtyk9p/WQ73CVrI7FWUMDpcNG541rKfFb1dRM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.28_1560869035272_0.27349716382151823"},"_hasShrinkwrap":false},"1.0.29":{"name":"ts-toolbelt","version":"1.0.29","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"944b2b08fc1bbcdfae6efce7d6e58d8eb360da89","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.29","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-cyHnwIv+Yaik1IfRgMXGqNkFrgFrLFiMjGc+ZDI+poIWFy05cwEExmKoZeVEJNvnDvXsVOwQNd3OMdmNB7BuoA==","shasum":"7589ce372c35559b9b7dac44c5426ec9302ec2db","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.29.tgz","fileCount":199,"unpackedSize":109951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCQBDCRA9TVsSAnZWagAAJKIP/1aKrTO8nJ3jj/DdG+fR\ntHfcF3CRBsKHTVCRln8lrGXhJINpPDK4WX6Rf3/ctf25dA+x3IFcaVtHCqrq\n6jEutOajlCG7HD6fQi66ThxsT4dglICC0DsDMxj7Q5bd1bXh5lyV+NaZ5isM\nrl0EHDavy50x8ANKgGbegDNUUVzS9hI6KOVMyfrf3vKFODQFmd2AmWckntVx\nyIAbI4jAmsXvdZWOPpOYIQ5RMe+cACd1pfBBO90wgREr6AhNfeslM3xkllUC\nVQUdwPnpnvAYzT8snC9OxyWxJGpeDPcIq80hcY3beAqyg72SA1T4axQ9WtdZ\nesWGmB251+hfW1IKk4+eRZGdFiQ7tAYLUbe2BTB0jWF8dLNklryJZo9SkzYR\nlRr14P3XAjXY/tYgPzYKs+zxbxO12OWjznJCY/t04vj3Uq4O5pZK2kzzDICf\nNAPdlS7wc8MaQoOHM55mDy6cPmphDLq9zDAG5jjEncJQjHsK62b8T6m2hbSv\nYSnfwsgbXCKa7JVm+xp1t8rdZtubTciQrVa27RkY+lhCEUqW9dCcTORWzp9A\nOooPz1nEN9io3u9yz6FG1x5DzaRscWkf4+kyrdaWRvCwRIEHOantJWoULW36\nDZgPODd9hnh5WT7fEnDNyrXC5BeLm4XlK4ht40FmdSjgUeJMd50Qwj0BSuYA\nbhGi\r\n=h7kf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBl3tBjkUmaZnAHXyTzBwygHtu5ARTNS8kNzzQmCJ3SAIhAP9xi210oCYJAGlWBgH0f2lMWmEpMlqzyImS9Jpf5xI2"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.29_1560870979371_0.7712811836605418"},"_hasShrinkwrap":false},"1.0.30":{"name":"ts-toolbelt","version":"1.0.30","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"d9f811231ca9d6224eee8d62f8e5e6a52d87fdd7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.30","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-wQknx4WOpzHh2bNJPGZTvMb+5kNqrJudNGKB4ReKslyuabdyRoU7ol2BzoO9bresrq58MzMWcA/JYip8k8m/Mg==","shasum":"13c49682986be6104378fa63b3f7eb7a6ed44443","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.30.tgz","fileCount":199,"unpackedSize":110238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCR3lCRA9TVsSAnZWagAAv+kP/0Jb98CvYcy6ZbBbhCZM\nQv01G+T7qqlszAEOv6CWPiSOW8p1D8vdfMRPLs1KmE2zyCjUdfwLPIz+ZVTx\nx1SvyhvuGtviWYfnll5QYEeZdoHEVLWUnbVHebR+5F681+caiS3fu2KYk9qZ\n8i6qxXgaAmxso0VbLKPmAPQTCslLYYQZ88Tg9qUPTZVI0HHUGsHaWdgsGyZp\n2h748+J6P/q5BwqYG4DHYDE2jeDXZm6iAxutY2IkCO0b7iifItTNSVZK1zwG\nJrMjhfUkGe+EC1oMioqvKP5q6OzH6qiY/MQNsBrAykkCT/jIyKNmFw0ekiZm\nIxpk2auKzZOfqK9CE2OXHYATeYqSvGF0lIgeIwNMgmXuz1lC63ZjhKXTZCB+\njlEFc7300MEYMopcJl3Yj6m/OGJktHLRDnaMsVIORGpbvPLxl/5pcAhkvnJH\n4dDcYe9io2EX/VsgzFiavWsyTfp2NSr8BfFKA5hcjkjnmX2FIRp7ka95mv6u\n7SPqWe9/JHVTIOEC8AGQnXaWf5AjH0M+Y1lgsgJR4hjQ9zYR4TpWnRbSgelA\nExsGMl19+V8l7Xlz3lL41SAKDywqIrALnV1KUIj/jixsb0xZjJLerRLWo3V+\nKVG48RlK23Zd3byI0fD5CoRIWS6ikmvrNbI9TnNkY0vDWQvVGtzfP7R8qCmj\nd5rS\r\n=y36x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBNVUoT0Mk+Z1w+DbIFnLDk0VFspSsUfGkxNQJ6LL0K0AiEAl0HunIxbl5/fH4EPU2Bv95RvCvq5rX57YpEvztbmZO0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.30_1560878564167_0.596713669442823"},"_hasShrinkwrap":false},"1.0.31":{"name":"ts-toolbelt","version":"1.0.31","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"65ac425ac1221343e69d2023aa6ba82a81aee134","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.31","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ihuVCR1Hke0a/XYS8pO+zAWkPjMHI6EofaGnCv9qzJngOb0WElFM7/FXDeQfbugJb+A/FoTJwX654J0H5pj5wQ==","shasum":"7dac7109f56aa5cd54f44773cf24bedb52e85e6b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.31.tgz","fileCount":199,"unpackedSize":111898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCTH5CRA9TVsSAnZWagAACr0P/0YlMMiad5JMSbAODF3s\nNrTdHhDJ3VDzFdR8C29jj3ed4o1MQ3/vtIILZAWGsQ1qDTH3CzZTxzFbkVQH\nBLGI39csezDV70Q6a70wqsUpa9/tZX+JmMQtkVNE3fxQsduAUEosKLC5tcI2\ngkhTb2H/F0XqCqQB1RNLe+BOCdDk992W0dy9330ddpYtw9tB/zgzVKOMPgmd\nX1WOfqGBxSRINGaDuKPAfxZSq1r/cPIsrYTpdicvnB+FVGq9klupuAfdH4bf\nKbiHTnGDCEXb8slOUKaZ2BziUX7NIxL+0UXEQzuiXJ1qS6tQC2er3PMsrQze\n/DHDp2FdG3B8ePbYa0dbgrM0aq6g+wM5HmfO3lJdzkBlV9dK7QXrPNk/4aEy\nE+1IN/0axyt7KMQtACJdW95D0qqMXz65uezCHX2WHTwsHvzLFpnYTEClxG9L\nATeIiKA6IAOdZA4SSfeDQH5+zXe/LAAfpAPyLYNYIYQe92I1Sc5LyDc1CwEh\ny0OVzM87CLvEhuaTXbrpWycJKitvuonY1x4mw3IqZ5RoKK4MVU1NzCinzvoy\nMQepgSp9vSBxgX8cMbq2rdD5zwieEFvgZNAhM36i3xeC3Rdop5oQwdywGLGW\n9mVPTwnM5ddnzoqn7nH+GwKLCy6ebN+PFO/1TmBwADdBZvMBrsrOIp40AWLe\n5Vr9\r\n=N+oi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYfFHQkK8IVOHEL5aVc1EOIsX7LlXuhqTDKkL4JX8htAIgI8ZHPV4yrqp7h0y1Lo12xOmeE3XzD4Da4bvCkX4OxxE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.31_1560883704909_0.3586000528791706"},"_hasShrinkwrap":false},"1.0.32":{"name":"ts-toolbelt","version":"1.0.32","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"27889e6a03c323508eae9adbe6c8f71ad7f3127b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.32","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-yDx5bq4Kqu1s4eWVtvG6cmoJ/mtNstF/JfTGre50hEH93aqfg+qLt4R4HHh0yFPuiulvBdlA8bEyRnQ0DkGFyg==","shasum":"836cbc3868b84fb362b6ca486b0fe27722edeba5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.32.tgz","fileCount":199,"unpackedSize":114649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCXKgCRA9TVsSAnZWagAAJ64QAJPpyBRdIEWSvfYCgLv5\nnnjJfO2iY3u1mNO1IlJmoCZzXCfwAhtSJRyyg7oMoGxYOWqs0m02z/bE49wD\nx7jpq8vKjksRCLDkZgvjUPsF39LEwyJUIQo/vqxgSpQ1OSJwL1o+U2FnJ7zZ\nQpdIDLbpDM2BhjnMDcXO5HQsm5k458Dvu9V56U9N97RIdOasJFN5fep1yAoy\na+3wBL3Rez5JV20FAzn22fMUE7RD3t3JFqwjReOK7iYKdNEXR7qRO53itYO8\nAV2LbtNJ+7JgDqC8gG7Iv5JIu5QBbKNuHkyXbR6wM23jHw5HMAmS5wt8/j/T\nF2lRgtZcTUCANRqOrs48e9KfBep+pf3mBaZ2zguot1G0q/xgwvZoguqP2qZF\nF7ZCR/bY8BnWhxetG0omJOw3a7/e447bdMFvGfJxqJaE5nuYevSPPBj9G7fG\nPAB04uSfkokfh8qsVV84Z+taN6O+hUjjqjRhhI56B6u+q/beb0tK0sKmqtjg\nQ+ncAvgTZMI38Xakuax88h0rRj/DI2rVQCa+oAI7hJTBLgr5qL1jUU6Dnf7g\nnJFgiN4x8YUBolE9KaIHR87bwu74JYGzMcHHHNTlexw7+2BN8qxU0q+1Ls5J\n0sYjBn7ODkzgroe7COXQorZRjJ3Fd+KNRD4UnYrzIUC62HRff6MJEs93V+Fp\nGJzW\r\n=uFOq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDS0qmiEStRAs02Zi1KcF0NXe0oDmYWQS8gr1FPuHAN/AiEA0TINDWleXoBenjOXGdplTRomg2wl2PfEObEiP4v2UcU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.32_1560900255531_0.7851889027459555"},"_hasShrinkwrap":false},"1.0.33":{"name":"ts-toolbelt","version":"1.0.33","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"aeb24cdb662d81770cd92c3767b366d8159db061","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.33","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VPNhJJYpKLmhMOpjr3gLFpEOJIadUsjO9O5VxznkRRsLFWFX5nA5I051S5obSZqrYRuRS18I2obKByarsLlINg==","shasum":"549beeac8e80e75d1fc2e4ca562af870708f035d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.33.tgz","fileCount":199,"unpackedSize":114675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCXWhCRA9TVsSAnZWagAAow0P/2haNux9KrsGJ9Mu39ux\nfGqmgK4FrSrC653dTcVesyNEF+sk5KopDOmkyAG15kTZOnL8eu3nJWBkEmvW\nfowWfMbb3sfexTg+WTr+rgfjAlM2s4v8MLiM3KWGc8owrss0L8CdPRhGtaAK\ntfgQx3d1TyJuTJ7ejlMDSfo7USa2eahcSeXfraToUDc3ZUV9mAtEDkAhprkQ\npLPuvAP6m8PRsgWmFPMmZUrdC+YGINCCoonjfSdvwGLzH8qAcTtNheg8KfjD\nTzeWShejyUZoiPZJut9d0StrZABCUs31ufkmWSzN516qyITRTZOQjtRqz18w\nBj9ARwQCbmC1IcBeEMWzo0k8P8gvvqxXljOlwZpVsir6aK+cZzVwBcl1JXZp\nNc6Z3krxMhJxt7xds9j9RMdzQX/Jn+9xhMD1KcKpacyhH+4QOdhMJSUevWQ3\n79aAaqLi1DPXrcO6NTlRDVLfojOLRAHumoVKZHDGasarIh5hBAcROfgEg+R+\nx/gm0RB9bz5RhectzokuVqvIXrdPXuWHsIXldtCgDLC/yZUuLn8G4omOgqbk\nmsI6n/XeWdFLnr7rj5hnqsMaTpMLC/38vWlaO77zOcOrVunAyDSDeVZz2DSJ\nSAu0g3XZOeF/YvbQEEh3f6x0imOXKajrb+3fwOVP6szM/hWeNvQrKSPNUUZ2\ncH/9\r\n=PYlN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQVh6bZgvELD/UfUPrrEh8X54vNhZ8fIxyIJVedggjVAiEAxwXe0HHCcfLSZjyN9J/o4LrqNrzkyVxjwQ4HFW43prY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.33_1560901024752_0.7358124398964443"},"_hasShrinkwrap":false},"1.0.34":{"name":"ts-toolbelt","version":"1.0.34","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"c8e8a8044aff0bcc2f5c6f088c4dfd370b22a1f8","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.34","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-n3M1BRPW/+Amu3YJYBmG+/bTh3xjTDTtHe7lK6h476aPs0AtSYVz6rrCXE5U9Z5TFNMscR5TuWRvbjt0mejjgA==","shasum":"f35260171d2f87e901a2055a601817b4bfc743ab","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.34.tgz","fileCount":199,"unpackedSize":114719,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCYEeCRA9TVsSAnZWagAAH8IP+QGH/yqKEZjfZdusKPT+\nvk3DdFqHusUMS7M8DVOi4qUvSYqLJPIOSK81w9BlNryHngUhGfQE/BXs3GxG\n5A8c4O/a+8uCed8EYVRs4mgHdaA2gNFjgodxlwwJZMi/bRUg1SNIPVbyMdvr\nV76gh6bYQxewAsNPwUiky7LO0DKkB7SuXl4Zg2puLKYUe7HopY0pE7RK/vrA\nEs4Uwg6koZhiXuZFeuZHVpjf0Ws0kw5XMK/59pvT58j+Alz0BMGCHKbaAGyc\nFd+bNWE6wLjT7ge1QZ5SLOuk9x/baTQ4gKPSxZBgRE+Chk/K7yS1yFvgGo3u\nsikdk6sjmPDD3cOQC4xb9aaLGUV5wu42mH3MuWP3A9LxCgaWP03eUMCIPKuO\nGT9/4sydgLq/e7M9bbd88+H5gSnuBujnZCq3Jl3LIfU1XZdB0YDYHF5spev6\n5qzHuYeInaLoO9spNOlXQh7inUvN+Yb9S79PRItc0CyQTrw181TMQJJBM2rF\nq0a2EJFD4VN8D2NUTbgTTvmz9Cfplja8q5n2OZJGZBV0Ucw2HAqbt2UFHwkt\nhrfkEZpwC/+ikHxksprSygRhLtuLep9Vji6u6jIhk3dk0ab4rzbQsysv3YfE\ngxq9X+ixj15K0GZPVl9nvFhvPL2XXPLoChlsJq7F4HFsFQUefqQVa/ASJTdQ\np7Bw\r\n=KlmA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHEbtEFf3EqTZUzmQNOsjt2xW39H0AXHgU6jJHy7XswWAiBTimfIWlbwjPMh1TD1MobNBt+cw+1LoBZ5U3TsfermYA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.34_1560903965415_0.48062292636679227"},"_hasShrinkwrap":false},"1.0.35":{"name":"ts-toolbelt","version":"1.0.35","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"a3bfaa21b3a69004b725e4bac236674bf9efe852","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.35","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-GpMDljPmdLAa4tXBwroxAWhfFC0SnKyz1K+rLYfPWdGVikvZDDsbeUOxRwEUsb4F2nEMeZ4c+OMy0vcqsDhAdw==","shasum":"e222268743e1e330b8773dbe8eb212719f6982f7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.35.tgz","fileCount":199,"unpackedSize":114793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCYOYCRA9TVsSAnZWagAAkE0P/A7wB/T6L/vAPvQmJFGE\n/zlAL7D5FCZqUhFJW6WLT11k9snlsgfY+mZgm2Mc9ex4IvjgvIhi6SNkKoth\nz9b4It8Ij+bzXYwBV4Kvus/X8Z8GKEQQLc9kmNBwAKKAgzeA/Z9nqFZynWTZ\nqr8fwMdccX8C4ipc3IKkS9k1U6IzEq5Vhel9xdqNZ49yAebl3QxaJAfM82Tc\n5Caw3ImFjTGGzxAXkE1gVRC8mwsfFylQ0GVg14fKhLRGEHRrKKApRKpd9wKe\nWFTiX7ZEz4cGG38BDNlI6jHD24xAralduhzOz8Fl131wzQSFc05bmnSfNogv\nbjyNx2lbU4bSAbXc2jKwhtZ7zkLYtRd7ugI86GUwF8bte3iquKq7flELrm7F\n9S/LIiAG0ivIzMxL0Snk+YIhMs0kzdLTgUjWHrzVRXnNVSOT6oW0vdMSagDR\nK8aTE+0ykU+LZOZFyS/aARnyFtWeu+fcyS9cUkjnXvfeDYsTReh10XaLgGDO\nRmsfVDoPfyremSvIaNQIlljzavenPFMzXEogf4x7naGrGh7SI1j4RK8VEbug\ngo6vOgwZ6FtyPIj0ohjuC6+s2T1Do/jiivxcZhjG2nHLBMkgr606aOEzvR5I\nf0wkd4h+CBVPZfBxcXYSpHLN8ynWZobJ63DtlP10xYzGh741+SRHcxAK6+jX\nrwwG\r\n=8riR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEIhu4TopdilBegceDOBqqSFpik0pV9h3Xq6AEb0iQwQIhAMjM7aC1dKzRGr6TsgjEbf0Seu6vaYG/wLOc1JMh/Y2t"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.35_1560904599775_0.7688441069040131"},"_hasShrinkwrap":false},"1.0.36":{"name":"ts-toolbelt","version":"1.0.36","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"19226ed5327cc42a57e7bc729d3d50a9d7436e00","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.36","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-i/a7o/630W3M9lksBZWBEhWQiRs71qydR4C6Xu6SQajZIgl9bUzCGdIBaN6B5TQAt2fF9kVoF7aJcGuV3IS6Zw==","shasum":"2eb1e60748d95c6d9b9985e114f4bd3a522cc8b9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.36.tgz","fileCount":199,"unpackedSize":114787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCYQtCRA9TVsSAnZWagAAe6wP/1Odg+QgRLoBoVEvOHQO\nGoKSs29NIKOlwU/64rvyCHSip9XEyNrnopQ78Ucui9aZMISK8VaVxDEtvIBU\nAG62jl1DS/BieHSLT90Ws4HnhdNFZvrv64iY5KLFi/A5MGSGdV+0QW/0NDP7\nw+wShcvFDryRKbNO6LRgHu+sgf9jrbZtWoWrYzhaRngulsYk295hDcacKOXg\ncLw6zujER/0zULDQk7O8qxDRR/aRJG9BlNZQLebe7M+1NIUpfu6hNhsjYt7Y\nZfHAnVdyD/AupSkUSUozrmGkdGfSyc9bYnMzqRvtAo6dwUl6dhJWKR+pKDbD\nu7BoyA4lJnulE+1khHttZwSuyQyHEYxS5HIZkEQa1NWy1zLcn2UgVD89W5gq\n4KLSCE3eWnf69KIYUvXvnTV5jGL2ZMC9YRGi49myr2B0W8a+LvTItiLsFvdK\n39KhsgF0TxFcdfzxTA00oz8VfNJA7GCmmMCQMThkrT3Oe1W8q2vUe0KQglUm\nD39ppc9SAUoZGrkQrdXSZ5cV8XbOyyXBZDsNxF7RHahPhs2MXRDWWjTN4RD/\ngUYpo+5C50kdiO2ZcWTejTBUIsdztZrmkq++3Efd9048jTQtpAFVah2VNIO4\nB+LgMrl0xmxoY/Sb/JP7PRX5TWzNewZfMm0utAWiYx+u3uK4ZsZszLwNdHNW\n0Zdp\r\n=BFJP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrPfgxvn2G6KkhU6jT16kRgMCTWHyLKkHgETNG7dpyWAIhAL7tRIFQnggeUqvH8g3mGyn5uppZL7Z1b6JkFVKiqEp0"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.36_1560904748509_0.736637099794835"},"_hasShrinkwrap":false},"1.0.37":{"name":"ts-toolbelt","version":"1.0.37","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"9cd910cd4d2b6914e28b185979dc9bd018718130","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.37","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-P65R+4a9bZeIY3BMmcKwspoVx0F/r21sUNcDp7igTypgbGfHquw05V5jGu4QagVWdhha3cdA2TzcQ3kNNr1oYg==","shasum":"865cb0fb8de5d579bbd76e08d936ac6cb4a33c05","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.37.tgz","fileCount":199,"unpackedSize":114882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCisHCRA9TVsSAnZWagAAztQP/RM27rou6TnJd5CwLTAC\ns/7QVcspCED1GEmFSrdaCLYtfZIuCL/RZW0CspZ2VUNujKqV6c8feMvMwiGo\nGe+dBaJYoWhEGhrxJDnvT5GkkBWpPETt28jy58+zDaa2pRHc/nz9mjrrUyqT\n9eEaUqKGz0gcMMRUm67dgL1PwL+Je1wcw0+lMr79C9GoBG1SSDHvxLmtH4gn\nbfVP4MnWBKP56THGYl8+o/MGACwI8pHlSvrhNoUT8WLyXE8dJGOvQf5OawEG\nL1Nk+QcvFAYIxkdiPbVorBSp1kcT2dOv0C98zgtd/E2Da1S74rv/VVrEIAHd\n5f412J+sEaxsEeZwRNNI6ATivtyv5+lSIdVBk3jfl9O+PuX+SUqMOwqnqO5J\ngm+sskCGoF28laBe8AcENYLpe3nkL6iK7WAQHgsMJVOSBms4R94pweL+oWxQ\nPQbaqKh47y+sWHhsqiE/qta0WRAsfNAl7/iwTeYLISU9IiZsH0BN9yJsTdr7\neomeJm8qwhEi7HU7pP10YNa9uwb2t1DEOerVJLZT+6V+ZZ/h/S6e8CqkalDy\niU5Bdfua/faczZNPFSyqwY7ReF2kQieC8jLAhSm0SEt7Do2a2GTnvgo9DiWC\njW9zNzMlarqtJn15kzB29IDxkX+mMeviwtefkrkeUm01S9RzGA8HLx8j/qZf\nJkkT\r\n=EMtK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnHg/UKqtoEDOPBFhmIfh0E3hLhoW+U1TKC6EOlcZJ4AIgHKOFtcP3Vkrhx315npzISSJix53uLY2kelnreqzlql0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.37_1560947462827_0.04318253454604193"},"_hasShrinkwrap":false},"1.0.38":{"name":"ts-toolbelt","version":"1.0.38","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"963b439f364e58c3181a5689772a699220980cb3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.38","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZcwIg0D/D3/lRPoWtx/h1Lgm/vUzsaa2mhvwKzjtb5LCFp/eZNughZ+D8WIntC0o5KPL9KK+PZjERGZW49N7Aw==","shasum":"ba8543e662417ad253e474976ec8fe9a327aba51","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.38.tgz","fileCount":199,"unpackedSize":114911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCi44CRA9TVsSAnZWagAA64QP/3Hb3KaHVjLDqZKCiiB6\nE6D2Z9q7QbOXekmnyU5Gm7mqa0cw2Bb5HUGDmYlu54BfUoBn/W8Bg7BgH0OA\necBODjJ/vpUHPXEB5Oh9kr6TDEJfR0nH4TvLTLE+lW0W7F3E3Cw8lzkFP2vH\nImodaPe4mdmmpBvfAhwLHmxLEnmVx36qsW400hz3PfeKg4gDRLdgCsMSEPvs\nk1R/S0L/83xCGgCmvtEkhTLqvQxgZuPcRxOQHZggHeXDJ1ThuEoW+o49opLy\n6tn9nfYhbZcmoUyIwbcyfD/j5xLovcn7HM6HtuNsUaYhzvOlMGgwyX3PlHC4\nlGMb9aUD1qmCPVQAlQnW7GydIxrJ9BxkMPZkZyVFjQzz5+lPYrlRqDV+hFBl\n1Orr2Dt0BE1rDqp9L1CdoCOOJhj6s/K0dzcFrhwEhp4yA1EqtQtL1kvpjt+u\nGCQjf17PEQDv/WyD/ZPT9QPNcNetp5++RalObPzxRVpSJNkCp5RWft7kkVty\nouAqlUMpJkWZh4eWOPSqBDw9n4VZbw4w+6t4RXWVXWah8UE3KbCfA+rhSf8G\nW5/l6H5puD4GsdYZKdcVwuHb5/oadZEvCSYkfQDZyV3OZS5uVoyUOQ3EHENQ\n78G5mJVEYbuUKIUC7KQqHWEceqRz5exKr6OiV0mWQ7UJ185zXHeM0IBGdZNh\ndbub\r\n=odNW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmnu/BXAe2HcVuCfbzW7s9gjZJIHgK0/KBsK0fxuJU+QIgOqwaSz7VTi0I0IelYO8AQRWfPLepUChS5GQlPXH4Evw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.38_1560948279282_0.18635935809197668"},"_hasShrinkwrap":false},"1.0.39":{"name":"ts-toolbelt","version":"1.0.39","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"512bcc899da163ab4c0f16967d6659c352322eb9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.39","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-mMyQWeE9fBKtftDJ6v/DXcGZGdZtyGvy3D3CHI5oUI8VOMrv/Qkynd+BZ3eF3/FIJC9aWELdY9WWfxW+b/rucw==","shasum":"8291a6785717e625accfddfdc1247c39b548090a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.39.tgz","fileCount":199,"unpackedSize":115244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCjDNCRA9TVsSAnZWagAAIPQP/iTGANGaZs9WKAjIUTYa\nRAuW1nMwDT+FUfoJ1BiPHrX6UZhVEfEpqj4Y9mr5pea5mkvK11E/nYojMxrI\n9/hjppllhQUB7YdsZDhUJvr/me6ifdWg0CQCRBmMhw5CWHyUzYcbWTk4TX1W\nSJ3kFePykZLHMGden3Ml8nnBB3cF+FNgiTtnKCB/N9GMfbJOVXtEibwoPVP/\naY5HtQj4nlJzPquO+Bs+Q2XaI2psOi9WvXC+BRHdhRfEUkoRpUz2QtswjuBr\nI1BabpDzObdfPtnv1zK7SDD06YHj3yDsHlRYIDC9h/jCxi6+9meW0fA6m1nS\nkiJDycYp9faUXxbO11iT8Ss59gbIwJOP6J4Lp42V+GURcjz5SPSwusR7VgWC\nPucb7H2BQEw1IxwiHjZNYP47iU1oq7WWdnIDCHzrtZJt8aQNQ9knq7Kvdflq\nVcbT2WzpdL+4DbK1+WU6o8rCoDLKD/O+wTSUfXK44aPrtfy22+pyYv6aKrU6\nWatkfQC6oEKyPQOP1V/9ePS0gfmC6U9ChZJj2E8dLeq1n2xDlm3VEJKOL6do\n/PjjX9kXVC+aiwe/ZogpX/wvsrVUeILoMCNHgPaQFydp/IeRIvdcYJcLBAiW\nWFuVCaK31ij06PB8x+WtE2XqkJHYIg8iTLQh1Lg9OdYFYZmKfHT1KBPqahqE\nVIGb\r\n=O0tR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKVYUzpttNr0Z+9z7GLhuVtNEgO/vNHTfOgLFxJMcH0AIhAIFKVgyA3PqRVInc0MqY0wgen+3dGSJg+VHC99Q+MRt7"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.39_1560948940668_0.9316826295254335"},"_hasShrinkwrap":false},"1.0.40":{"name":"ts-toolbelt","version":"1.0.40","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"11ac674d6d01edb76baa5284af23d43f4344a151","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.40","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ep25jOs3xDVDIKbnA6NWMnO8kt7pDjDaPr68+R3/YtOHoLG0oCnAlOy4pRbEUUKkjLgwo+LDy/TV9jksEFPCJA==","shasum":"8fd79eed9130df9a8826e134d40de391ea86ebac","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.40.tgz","fileCount":199,"unpackedSize":115237,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCjKHCRA9TVsSAnZWagAAZBQQAIJwmOy+FcidvSoypuWE\nwPwX/2ULkTuc6lYp2rkV3UtmKzL5I1myFIk7Y6vvSB2SCAJO7m+Geh1yQjXp\nrp+i0vOcpb7Sqeufc8Do0qdNkY3JqH8KejWnIhW98eu4BphiPbOkbNq67//+\nf7p4Sc5dV9BsEnKIMPwuTq+faoHkrb8lRwrc+H5aLgt4sousrZ1TGUpxh/Aw\nQqC0WTOdoPHRES7ax7+ylgtj/NuctjpvNfoV3LFrncDunLcqJmk4iVItV9rK\nEhT9i8WXyKV9cq02BFZIR9FUkMie3vnF517jjK1ciTIGAdhoe7NP2KfGlHYW\n7RnVPK3pbOdiJlbSb6pKTSze3PNSJHPuBx7VfecC8afkDzwTv6iDgYpH8ejJ\nw5Lm4EkfF92OkDMfyvM39kl/PrkhAqhDTU59OMOebmYYGsQe5FmToyWKmgAS\nugLENQ9YpZe8XoqBjkT5WzTCvvrKQDg1R4eJZh2cd5uWSblmHgbvjacioUm6\nMqRQMB1mF7bTAqeSYHZOCvWkIOZStjQSdBL3iZJ+tWtL0f5EYztuftNw47as\nLh9ZShvlPDxhhMRZvkFk4rncAwM72juvh2c52MN3244IQgVhLpP44qam6ulR\nCb4+A5FlWxrZ4hIuuueIV3zfshbD8H7myrO+5sjXH8WnCTeyAWOnGuWD0x8u\njLqr\r\n=tIRd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAPmaYZw7VsqukTxYHQVxvr25FF0/8P/p4r+zFOc5yJ2AiAwc/H3hIKhYGhy5wpsQfOWWrHiYs1APdzCbNG6oQlVHA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.40_1560949383268_0.6039923423813849"},"_hasShrinkwrap":false},"1.0.41":{"name":"ts-toolbelt","version":"1.0.41","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"75bebecddfc0b8e837d066aa17cde6e3a229777a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.41","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qblUvnXRn9RYirW9xpQttp1hUu+c5scuoruvTuoxpEXyIhZez5J3qsv5slQ58YxLwZld4Bi1Vv4eqSjBdeJ/yQ==","shasum":"a7cb117176261c0b1c1f743f08565bb61df6af55","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.41.tgz","fileCount":199,"unpackedSize":115241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCjbeCRA9TVsSAnZWagAAWLcP/3f27fsiWiX8H3IVubAs\nLAQyLOzWCGUU3sH7uxTh/uYZKY+aVSPxOeN0O303U+FWa4zCLnIDgaYoXYtT\nvDCx1WLbFpqoJfVZLFSnKEFsjnWKMyral0E29XRAxA5rQpMjmVFjo66hbsBj\n906kLskEo5nxeEKhNE3auQQLRhqvZ0ykydklcKY2O6fWDglxq3R3hR5zyVHJ\nafvJX/nhJCFQ2AMD3/sU/j6LXbnKr6xDygytFjvPFpBT6TEd5dUnxEaVRhTA\nT3z/rKhUoUu7imnKJ58YuEYnAoPXqqEulvvZfjxveMFHWq17sKX4560p68+K\n1XYywwDJldt7CoQ7b8zthsxAHAZAQzw3qulJIXrb5nuqNbDv8ThQWgwyjUqe\n+rbK7PJjbUMRfzHU/u33L67UNW2cVXWBfnurSDU4bmT/T7yXXJCop7u4+LE1\nlybJq8cSIPxSBp1b+3PJhvjRy12Uh6dwQSMyg4/7iZ/ZroiOXz6DzbZwWXQM\nAQTxuLoZI48RNGMkO32nc1B0lVcsUHhUHaCAPtmqtI4s3Yk/kxnvwOUEh4a8\nIfGwhjs+fN8tzTynwaWEaJ5zvN577Dj00IQt0e+FdcuBplt+4VC7ONXzokgo\nSfZqXMqLxuMzMroTYLBnbzRPJ7p9QgNEHkmpG95RtO5sGlt4fYrfR/XCxUOa\nsnh2\r\n=Nipo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBt8x6fFPXBigOxR6p9qwmY963IEULrNS/F6WQ4aVqlDAiB4bdF59WhO+XWwI9gpPSTu9uYa/GHmdHUHKyzy2PqBBw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.41_1560950493932_0.2797415740393099"},"_hasShrinkwrap":false},"1.0.42":{"name":"ts-toolbelt","version":"1.0.42","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"a9b8f59c7f88555d5bcfd8accb5a5dac9209720f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.42","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qBKjde9o+65iTYdfe5Od1NbSVDA7aALwXe4HPpPkWBDb8LNS5Ntzfpj3NSptiyNBGQQqrNOi4ml3QbvCzNXQZg==","shasum":"42bb90e65fb826cc9d86cc74e7b4b5fda1f53f25","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.42.tgz","fileCount":199,"unpackedSize":115236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCjd2CRA9TVsSAnZWagAAICwP/1T1HwyPRBUWuNCnneR8\nNzlF8sU9fjRGHV+Hy3r7nvX0KXM/z7ifNOQEzWFZvdpLIDOADmtyT+7Ll8mo\n6zgiHYWRp0S78nNCLYvpCzGeQal1Vdxe4oSgu+k8aJAy+YWbu4fP+ImLAtdf\ncG8gbhbZBVQxAWixu59uZ4hhDA1OjYC17UFJXu0yUCWhTsixR+KUqV4x/BNa\nmswNho+i8b/DC35ky3yTcILZpXgFmR4niY+T915OHBWi8IwdQXBvnh15pEak\naEjm2YDT0L8ZsygS7gZYb+2G8aqUKpeEWo6fPMM7/YrX4xqbjNjVBkCEf+wI\nD/pjgjfekW2LbIdIv3o/Tuc3nEBizgVDsg1FV6XjG5pDTHQRIwrk4ZkwrHyD\n5zPqMABWJuQqa1PLwv1qvdyse3mE/6mryJTqaF3OHoOomtfBK9izsj8WjU4T\nZTJs5bi1gFhIOuY1Bivx8vOky56H1mNEnHp4dmMoNPogPuLx9jP1EXO6Hw0i\noKspxwHiDj1ajg/No7yYlHwYMNk935N1U1PQ+2lnCxQvv7PhQ52/uBSygR3c\nJbGxX5Cg8iQTgasHcUaGqGS3O1T5AByrnaIslVGib5SwzyFIUAwW4RtxP1+S\ndmMzY+VulRfX3rR32Mm2nTNZHs4nVeneg6vIPxNN4wW3SIx6R3zqrEdKGWAu\nARl5\r\n=sbpd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvC11Z/YplbWyKJtc3KjXE4lb00j3LjfHW4PoL4yNnRAIgTakuv/t9b9DEIkAN+TyT+sBx3bDgYXawUjs/F0bT9I0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.42_1560950645483_0.27784015780712457"},"_hasShrinkwrap":false},"1.0.43":{"name":"ts-toolbelt","version":"1.0.43","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"248195572396125e1285cf562f7afedb1b531077","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.43","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+r30Ny9/1gk5q88FU+ldX1fPDDuBa6hLTxdw3vkrSYXnB0BUMcs2Gfo9vJEx+Ne6fcTJbv51ouZKnMsIIrUy8g==","shasum":"219ee076d1cd6a30d981645ff1ac4980b380f6f8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.43.tgz","fileCount":199,"unpackedSize":115239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCjlFCRA9TVsSAnZWagAA+zcP/3+AagrMYv+O17FsX774\nDcrPBfDjNlUWl95R2I2+CHSzEaaMZVd3rOVDE8F1CDAlVQBsabuLQexenavM\njq3kDh/8w65ShEuTHUmYYj5tB9Fvh9I1lldTytiW0mC2b+65P87J29zlUi46\ntqk9emVZMQ3t9BcitNxz5cIf3b4saw5/394ZW1qjjDRId3GRbAWDfUr4fZNE\n/nE4OytmDOHarx45V44SMst/3QNzvXAx7yZojn/rsuy8PfGtU/StMmL0vgqx\ngW0JYz2H2tdi+8mnB657Vg7Bbemd3rUm8N5eQjV6dJn6YLfpRvxV/AHxLa7R\nKOQSsJ3IuONYQ84Q6ZhkIoXNHu9yVvhA++afFieHplrnMgxXOM7J18JqREqu\nnBfGyg1b/RwjD/935WJjrEQoB1HRErf9n90bsQJaJlJM3aBrt7XNZaKJ4Y91\nRqCrTVbnnLlh5LzUB499KmQDW+7I8ovz6dGx23XnM+OBM7652XTe9835yiUg\nYNSgmYnQml0h9a8nAPAofvpPP0Ie5aqobxdZGnzvt0n8F5Rd/A10Z2jgC1Sc\nTbxXqIIRAhY5rtBEbsWvCrg8LAkn42j2mmBsTaF52EH9eVwp7doPfjDU0QXq\n47KxAhvDSAGbUZa/jv6+X5nU7u2HQ2dr7KmXmLml81E4F6EJjkOb2MZUNsI7\n5oGw\r\n=rN4P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFYhKxWVWlf4aMgG+MQO037QrL/Vjp9aJe4pmTrA9RbAiEAhLhRj+nc5yhX2XEUGEofcYoYwsmrKPHtJ7SFy48aBgU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.43_1560951108944_0.09162599328009557"},"_hasShrinkwrap":false},"1.0.44":{"name":"ts-toolbelt","version":"1.0.44","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"ef5b01d290914139fcc239558bc2cdcc045bd66a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.44","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-JstC4LBrH7xM0+8c9HjOqxbv+pR/6bVp35qoMjLZpyCqQOTYtI8HCYO94agQ0NkqXBCcU9qVpX6ofrrFPe8XCA==","shasum":"cebefaaee77548fa7620fa05f3a60b4f4a7d2206","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.44.tgz","fileCount":199,"unpackedSize":115239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCkPaCRA9TVsSAnZWagAA5TwP/3coLEg3mo49/BD+topn\nD6azLxQgrK8YoD9OOMlz1SHf/xHKHs9/uV1bZqCfAZv1ELqb+jg+DN1GzHbG\nKdrY2c6AyJMEDyYIGnXSHh0PVkO+jgw4pz1ChDuZ/QuGoSSBA3wzE1iZtajS\nwVIBfguH9dFHMXiCMpOxX4DLH2ascU/BfZgFJFsq9Rbt3RmnTBW2xV+7DAu9\n2wGsUOQJzuLjud9TmbzmmiYD5ti/NceLzdcKzEa4R1A0z2VoB5EH6ZF2pZ5x\nvKllhny6Ix+0rS8AkQUK4QCuwt3oqG7/Pvid2GG/7/U7+9eKQZGLHKxMzxTd\nIsbmMtFibSnGnhGzZV0bx7R8AuRHhMt1xmw+mBD0dnNyDbwKR1WwTfTh88Vu\noM/uMukw70utrs7+EeE/PPJtn4iAoWSi+E9bJzJBhLA/IClHkMyy95V8lPrI\n1U94C6ceF7zsXCIcYWdez9BpzR/PYaXGBx2+2E398Vm1j+bZkwY/QuFzURP8\nR+BTeUM7JbnEGL+G6Is5nBoq6BkIxvRym8sH403XXDLXXj180VF507p7WF6+\nVvPlmcYYt4wevajnfEdsq8l6G10rnzmj0+r55eyf2gWo9/sfRWbw8M/VnxQQ\nwcnZSaCbFyKb4SB9XmYzrc4E9EcQDtD0xGCl/jqFFDUDPBoS0TKCVIqNV9WC\nJM15\r\n=mVaU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2uByCnvCge1EdeMSecatv6/Zjt/ZSQ4tng9PSpiEwVAiAdpaqct1IyxXPG/hP57tZnbXeqgo2N9akagdjtPlcyBw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.44_1560953817529_0.46918509215131654"},"_hasShrinkwrap":false},"1.0.45":{"name":"ts-toolbelt","version":"1.0.45","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"08fb37dc99f8514a1649675f3a820c52975f4535","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.45","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-vb6lZ6D4nQQygLuM6a0d7b3c4QWCUPcEAwwqkkmiuFNXRenUWmYjsSE1VKvRW0koSm2OzRSxls11nZXQPj6m5Q==","shasum":"7e35c36f7807900cd90eacc0272aa844acb5e6e1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.45.tgz","fileCount":199,"unpackedSize":115239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCkW8CRA9TVsSAnZWagAAaZwP/3kSgFvVPD5rsgzKQo0n\n7dsua//8qiZ+ecKxP4SpNPhxTdl2kibOZ6OCNvqAtlIrGSh25DAfNOY4uF6t\nsoDPAJjspFCnrY1NbegDuL3NV0wrVH03/KTYjjHoYM/AFWKiiyHbJSSx2sEM\nmBbCn3CQX2fikiQOo9NFFmDNahZ6JrqQ1mmWP/4l5CI/xGj7g5nvjaQZt7mE\nnXyGasE4etZDv7DjXYdcP94SdkpJZfkVKHoHuarjlgTBeBkZQIbV3KD0atgl\nOutICAXz8pg2/5e4ElhezvxEogRiU6gnasngfuiou1MuE0+m6YuHveAe4eDU\nVbbRcp/TnhhN9b2sD2poyPJBspYd1Kw6oHN1yNIjLxINm39TwuzPflwDBlgJ\nECjcUAU3psiwnot4JCnKOzXyRjUNO3Amxn3i+pNV2SbR2oRhb+QUeo295d9P\nhwgc46f+ajqr80y2INaBJ5UDwj934YOSQI6TPwv4iHpFSHG5ef0EcDtRKHXS\nharj9jlRgdui0OC7KCdiwL2LFuY0nI1Qnhy7moFkRpa2Cuzt0s2jvxmyApfU\nA7Um1zA6jjTM3pSudnwsMsmX8kGHRqOA4pC5chyihilwiT2ajJJ1/GJtHqwv\nI21PNjPioLqiA9P2TSReJyH12lbWpQeT9smji0aE/g2EAf7j8rhk0IbCvo55\nzvo9\r\n=qLD1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVAN6ALp1EY+VHn+G+bcxnV1nFZZbitQgziwUDnq6p5AiEArVl/orhIwaLdXqWEYZUT7i0hB98JMqpNVUIG6fFCaiE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.45_1560954299525_0.8567649767761225"},"_hasShrinkwrap":false},"1.0.46":{"name":"ts-toolbelt","version":"1.0.46","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"8ce259e6443009008dd787dcf0920c83d6504fb3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.46","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6znHUzlK+UQq/lXqTRFxJt89hZJbiLZB7Use80SnVh3RpNDrkXy5a+cWJFZ1PPc1ovvt1Bk0k7SnuC+Y85hpaw==","shasum":"f54ee53ad67931a91d54ee33e08252d4e83f6435","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.46.tgz","fileCount":199,"unpackedSize":115239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCkfACRA9TVsSAnZWagAAGlUQAJk/23qsmDd0y7a+4hyB\nVMRd3yfF5tntlJv5BBRr3FWffSR5yrjPhK/2gSzLHZB37sqXpbs6auCdIJg3\n7vtG56ol6/3J9tgJMIRksYeKpbS3SgZpLdgpjpAia68Fa/Lpbqt28fxKSCyD\nYagKAf2A4rwrMkm6NRvaAZZ4Mp105N57tG4vY335m7AGUDV6Bz8/Z3Ldd8jO\nW1mF5QexTDCJy/iUCbEXkKBsNYRgC7sQfqHCcmTqR3pE37ukDCoRZ4qAKSd7\nzMGiuOQ6HpQ68uVzdPc2s1jKl6nSauIPhaaCq6ZCLCqURi+JE3B1/+n1k6eA\nOSHJRuFEZAy4XkBT0Z/1zZ7Rai81PhTYqYCXbvwjei/PlP7RFeUFRif/I2hu\nqJ6SbcTYpRT9EwOPEvH5FUe5CxZVIEtWnt9LBTigDvkVWj66U6jHIMNPhcBG\nYOiQQlKB/UVoKZq4eKNBim3y9jyPZ0hdkNQN0bafDaXCWrih0y+j5Rj9LcDL\n2MxVPAU4eHdsv3NSP6R1I0zxSYYv8Xb+OxW0gZutPFkSYMyhL7lanrSFlCTN\nTZ4zqoHG7o14WKD+4QIIisXKHVuPllXzpCy4HGRwUL0fvCfuCOY0/GpvwzAG\nwTEJNQTN4qCZBQhHrBRKU9LzLrReqDzAH+G2y8xwal8nfb1VFvhaq0WXIJUi\nUSJu\r\n=9r3K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIET0Y+wrAItF2CIvwaD09oPB6fJB5Y9yLEGHFQlPONeJAiEAj7D7GmBgV8czVF3cgA7Wl75Z+VcTPAF46aLriAUAFdM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.46_1560954816031_0.21547593474836013"},"_hasShrinkwrap":false},"1.0.47":{"name":"ts-toolbelt","version":"1.0.47","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"470049e18082cd4834b01165eca2ddf7e666052a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.47","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-J3rQprxPX/hk9SdH+CmZCj8mi93CWWEBHNkVw761NvHQevdmDrT67Eusre9LVu7fojUYaRN+myforhY3xZ8TEg==","shasum":"a879091f70d55047233519cc69c58656be1b0c53","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.47.tgz","fileCount":199,"unpackedSize":115239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCl9KCRA9TVsSAnZWagAA5kcQAKHq7l82A8jZ9M+5xZw7\n65zBLzDMNvaPOI0uZShcpbwF/Oo/VCM3jRC13IMPhdawuLJceOYO8vzd2+B0\nwYEe5i2rZBTdHJeHEFmKu93+MIPPm/w20teuxp1nzciQTWSLAj8kGz3mc6Hc\nO1tCz/8FvenKFqZxgQgMMNx+4gUBmeJ70IJoUSupvO9Vs3yMn+g7kM0Dr3SF\nxFNk2WMerCZKwaUkLgVDCev8l8WRfZqTXlpd3fZbBPUQk/xTwnXsGrVhPJAb\nVgb5as9Pq5HWCu8Y3e/Q7HTl0n029T4irwn8NY+4AxN6/gBQ8pOMFd7IbrZK\nF+yaqXpFJP57EKshzekl0/7OgsTZRe2NyR59IUodMKVY3ZqiLEisnJbJTfUC\nUkNhb8y18pSfpnghUz4Kyf7888NKkS5DhdIog7geXEL3bxSW5vx+1wyB9sg+\nfh8eWAaWf5hjqe5piEBK5il5gsD9q8eCugsCoU0iMR9x4HtOXm06tlzzahOh\nsVxdeKjhsnYJbu9bE/D1cNcnrivUfuI6Trgbrc5C37OwWEn0zjcd8NO1+pWj\nEQLfZrv2ELF1iRbGtLov4tp2ndvMW5a8BLq8ylYOOVOvduLm1x49F2swEEdy\nSuvc/IVY5lOuUD4ULRYHcyCHSHtjAmIK5c2nNcob28RJmGIQ9JHcfE0K1abS\nrJHt\r\n=Jzvd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRrk7bHE+0Xunz1CYrDW9raUhsuzt7Zh9Rnz5kYOG2sAIgBOnVRrBts0cXDazaAlz/aoyIMOpD417TcN8h+J5d56M="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.47_1560960841422_0.3539001281897014"},"_hasShrinkwrap":false},"1.0.48":{"name":"ts-toolbelt","version":"1.0.48","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"Successfully released ${name} v${version} to ${repo.repository}."}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"baf557e9e8558e97022eb4e48ad20454f72ca5f0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.48","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-J9uneEBNeObc6o+wnXn0fttgGTCZYHz7JDK+Vqms930Of+bu3Q5fkw/2TOoUrE7/Qc3+zD3QB66iQnZ5TQPiVw==","shasum":"f37c9f501943445833acc2d62c19d22235b8b783","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.48.tgz","fileCount":199,"unpackedSize":115234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCmIwCRA9TVsSAnZWagAAC0YQAJEH1wXxuwgOcTSn1nMm\n/Q/rG9BpqPiwGmEPfJxoFR22Z1nom+VojkL4zj0004cK2sE0fWVoCAlowrfB\nykHaAuWxGMDYr7Ty26Ny4R/wM5qY7+8hMeY9zN3nmGF/biNLSTatqLPAMWky\n+yNfcwtoQ7jDu4WfHd0iIUZmz9ngvJ2JwNJiXoE3zzn3B0vQ9uxn+Bk4Yedw\n+I4KmBj1kGLsFK7Q0hsxK4Eq8m9fJusx8pjc6t5jHVjTVdViUFSHkZPLkYlY\nE52r/WDW6xm9g3SNrhKTWXZeHhohVWJehHi9wWIXqMsLH9zox8phpEDYELJW\n/+X/1IgB48Y+THAlcTASfDg4CjqSbFZ5TCmeBFWHzO3vgJNvFfGzrLkHHVkA\nzz+leseyiIg45CivTlIEYbXQlztCHwKYNNVgxxEXatmPefKozzr8IYwuCsIG\nG2urLT6lt83HXrfYsrW2FuGZbzoQcqnxRVS+LNzNeemSdw+XP4X0NfmVgtYY\nJwrMibYBVuMGcRKdqhtliOk4BUiG3Gw8mRjMf2CvPYkk79JSvRI/ZuKfPp9F\nPTHt7zsXElPILnWOkiAX5ML8gIDRkSPPXVjl5khWAiRpATzCLxPLrJG5ora9\nvfrR2cJNA0hn8//gHAad1Gzqbqarwn6xS29gibvuVpvXYXSSj0xogBQ5Xl9z\nNcc4\r\n=xLsO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCxvtqW1YiBQ+CcnWxv8q+tYyGVx4Oc9gLc+pe8IBGFAiAXiC+to0gReFioNZ9JMnBUmqctTW2JLVgsvJJxD9tzIw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.48_1560961583696_0.6689716158369103"},"_hasShrinkwrap":false},"1.0.49":{"name":"ts-toolbelt","version":"1.0.49","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo 'Successfully released ${name} v${version} to ${repo.repository}'"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"6f7e38ffc775b09ce053e0d2e63b76defb8b17fc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.49","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-I+wOcluP0XKrw6JncqrfNiLITJnWno2rZtwAjf2KLZ3Ffyd61OK8aMK40K4TNdBxJkXI1rt5el+c3F1Q9BvPZQ==","shasum":"a976c1c131e8375ffe730f5b93c5e518873f3729","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.49.tgz","fileCount":199,"unpackedSize":115240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCmY8CRA9TVsSAnZWagAAX1UQAJuvJEsqwB4eaUrcAuOQ\ndxdo+IqhmqrrmnduSKnRK3MPxsa/QEJSCukOtlDcMJi0/49irbNA4LREEJzK\nS9tsPL0/CGxYJZYevObTrj/z8gAGyuV3pr75UygE4/+jQgriNqndjQNyLl+H\n5q51PazKpLpqWOIKt8ZEqNRU8b5mUoZuufEhGfg62IX4rHINtZ2+lmrGYfLH\nzEr1MPrvJp+F5PszVvmcRC5R6ZmUbEBPyMqo3FxafL6RGMjlXO2+gUV4d0PU\nMc7nKwBrvSaFsxW887hPJDGW4ZJ9Vmzw0xSr1UhpF3rqPnz4B2lae7g59zNm\noSVcbZeQH8KqZst4xuL19m2uVuOi5KAgCOhQYHfl9w0iNnoSYV59xqjeaJ1u\nrB2J5SfApiqIUZP5cmaqehk1WQbceUxa/bN9Mp+Urp4FxNOqccGOtPgqfgS1\nOtHjcHO5MUUYmhMIPz1xqOIffUCh0+I6PZlJL7EXWWW+4CiAVuA0JA6eZSiX\nz+GRrGSS3NqeyVlYnBuEi2uo68PIGilEG1P8MxhZD0P1ckiplbVLHVyyfS27\n43tMFw7oryuMkhxon4yc9llRsIadPn/qpfaaZhwLNLKNPhM4fH1l06KyKkA/\nwOxQQembOmfD145O5KGhOVpPu1XuQ2vmAYZ5n9uk5mgcRF42JipYBpFrLw+S\nfayx\r\n=3mZ4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3Clooy+FfeQIfpFM/4jjrRQd6Y3okrBnnWdd9B8DioAiBOLlDo4h2MUQbf9PqlnmKV4Gj3ZCacJPxUwsWKWoD7oQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.49_1560962619865_0.11294877271471404"},"_hasShrinkwrap":false},"1.0.52":{"name":"ts-toolbelt","version":"1.0.52","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"c2b50d3e1464c0dff3191a515430f4e65a05418a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.52","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-44Irx+BfTOLqOJTEbnPUtypN3QIH9JfWK4HSVg1w4oCB5yXmIfpGCRk0yNeTLV32JN1qOBaSCU0/FiUWFW1Sqg==","shasum":"21c4a91db3dd6895ca7f28a956b12326ad15cd5c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.52.tgz","fileCount":199,"unpackedSize":115256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCmoICRA9TVsSAnZWagAA6ZEP/itVN/oR30lt8YkVmDbv\nEwm24J7z0CzVtKQs9TWKprUBBybh51CzFEjGQo8SoqSKCQaTon7ug/6BbFik\nHck3emCHXorIxlyB65NhDAizGmPT33pTxmldQe+qP2NOG+XWLbUTxgp2LfHH\nx5UNh5eF1QErkO9ZkFLrOx/Is41ZXGoottAmGHegAZ0ej5/217eCW0TSotHp\nvd+ohzOWiqmktN+2yQD+wmqv3t2q81fI8JFU34u6wm34Oi9d12B6SV1ZzrZn\nssIwAszkVyMZtzk5xnyI6oawOD6RXP5lieBHI0l+OnftfySjSFvIXoOPtFUL\nP+VRYJlfNMFiZYd5zDsgIYOgQnYSH6aDCGgN5TUCoYCax2FXOdFKd94J8u9p\npnxkxhGha7ZQoD16Yxsn4NOQ0Knfi91lDE5SV77ABK2JGinPkZ7sc68PRXia\n/tPFfA7jq1FvHd+nStK0jwnomOdOQ+SoGTVB8GSiq00+7U223veejnPX+NLv\nZqBoDjOc+jQfIzMaeg4tr9WvObvDGo9kZdiJRi6IFkpDkRB+1ZIlFKQR68Og\nQFnSDlheP4KQ9efgO90oVQ2cw4SdqjMzsqWH2+lzp9fI5l0kcNjAq8N+4Xjr\nS+Jwz0/3S7ZiRtPjK+L0lz3oijj2LKp/Gy8H8gtXfud0ii/vhhbyJuSHn9Si\n7sIT\r\n=JtY1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDi+/vbnlULh6ruyc1CtD1EbBWRYc8nAaZZnqrEvK7cLAIgCHtxKBG6S1WML+aJ+10WTwO4E1X3EoVcYzCfcZS0SFg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.52_1560963591894_0.4793554833229976"},"_hasShrinkwrap":false},"1.0.53":{"name":"ts-toolbelt","version":"1.0.53","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"7f71fb58b16a4c3c3c1f783111b31f3d2eaab797","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.53","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kRX8GielO7BSXCIVDbx/Hl5xzJCIXjOMZ2hVqwxqEwMjIxxOTKjKYoCUqz0TwiM/VegFaWnytQSNJKShFYyepQ==","shasum":"2d6a9ea9ff99500208401183b4d68cebee7ee8ce","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.53.tgz","fileCount":199,"unpackedSize":116204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC2QOCRA9TVsSAnZWagAA3UYP/23V0FkxuP392jHFkqyc\nYniFwT67ivExcaX/VJMP/1tI1ODZ98az3kUADj2J+cDKqSm+fUaOKnsH+n3c\neLjgxJZa8pis9UaVlj2K8R7CbQkfdrdH3G7P6AuJFeCpu76pJr16F7AKjZJQ\nx9Yy5T4zTqCAQBYDlQp2TUOmfMZHp614CJUZfbjam4lt8cLrZnZXY/cv4x/2\nkDY8T3v0GqhLDk7RN1Esm7mRFRr81ei1mXPN2khe9zNrs4BsviUIv9kpZ8v/\n4s+iCsx00Ul7lPxQjIGdzpEB01H8XJrKz0WJ2s5n9Kuc3XRTySwTMv4+WhAK\nYPo8Y4VQ2R4jgsmnNjToKzLG1d5EfRvtnSUJjpIgZjQbvMBMl/eFGQdBed3h\nzBVtGqdIEsyQfTZlu5v7ZdrGheMzZaqqS8KO++RgHaJLfeUF2sucK8IRbqDT\n8xhly5y/pmuaaNbUFi1jkivbMK8I+dvbp+d68oPUjCtMiQoSqH9ymLM/iQu0\nVaT9r3G7YZpxzQQx+WeTtfTmbpUmq6Tln14A4UtTXOdBRefqROYnKLznxa7W\n8TQHrrJhppa0KaqtDORYKadWb87kKIQE984RJh63c0Us/paquuASlYI3vJgY\nd075NJD3X8RMV4zPKoVAsIBVih9uwxDSA1hJnrpIBLuzIC/ONn964IMeXxyi\n52o6\r\n=k8/u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxakuC2fTq+fOQyZW0i6IPuUhSwV9QyKY6qtnyLKNjGwIhAJ/3Ohc23JypOOLzYpeJvhQlk24LxzgZZY4loYSfQ5i6"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.53_1561027597690_0.9016494768833958"},"_hasShrinkwrap":false},"1.0.54":{"name":"ts-toolbelt","version":"1.0.54","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"38a8d9f675952ff2ffedc2c5afac862b9a1dc614","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.54","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-LaaSq+4ZdqdGkOa5/LsbMlHuywsoNs4X29PM662ytXcafQBqkgVMry203Jtt+wj5prxtJBAfIKXQ/8rlxamAHA==","shasum":"538292c8b8ac200de36b630ba3475eca6dd30cff","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.54.tgz","fileCount":199,"unpackedSize":116106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC2ZUCRA9TVsSAnZWagAAGV8P/0l+1gUZno1NApTtENl4\nZoDz1CXnaYR1LDzi0y9LfrlcpIYhehr20EWu3Favlw9dXVmpyYbP9gqN3MlL\nGwYzAKRZ6PR+4+t96Ry99crHaT6CA6Mae6FxtUVr8UKRHM5efqovhnJRbFr5\nTVliUOS7rOHjPvJojhWpuCiJX5ad7BMJ6NGztFMJGayFKuzhjr/fbGPNKh/H\nrPQiGy0Qsrpxz0ipeq4K6hCEBpfiuJd+OXNQRZdI0UueaPdJNO6FNpXeIiuE\njcxxGkw+8L9imlHkuuHqLvMnUbdUMTawXWUOXj1j5IYbE5Q3c86Qm/HZpUG6\nEhlwncqDJt4Dwprih2TPVJyAQsj7EUcbk0FZszdNP3AZ8PlOdgxlVQ1O1zGK\nn92b+ug+gLcsgw7OkeiYAjxy03SeSKy3gYg8Isv4wvgzUlgbqoxNnawm5wyh\nyFOevPMRXqAcRe2Ufr3cM2hBJFBLsnZIC+wtLpQYHpgmmy5xGVcaUkbStny/\nJF+O5S/YYXd9cI8fn2NYbf7VKCe6rNO3Y7ZXB/k8bulIdLOWrHJSaElIiR96\ngnfaHYD17iFW43WNVw1dgWfg/boY5FFUFUdLlqkVA7ocSQ10joAdkFqMXZmF\nh04LnIxGgiffexkE1Zhr/SQeCLb16C9y82IQFCBsX6y20ItAeU6SJ/A49sM2\nCt07\r\n=COqb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuGfplCvygyTYyeoI1UkJHhwSwhaIN0mI9LCb6Uv+Q+AIhAMvBTKfFdp+65d3w3Ru0VIuv3Hs/qwwl1g+NFwnCPvNe"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.54_1561028179673_0.3978718542510269"},"_hasShrinkwrap":false},"1.0.55":{"name":"ts-toolbelt","version":"1.0.55","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"aca59162cf7671e012a7f4946ff8de32f292cd34","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.0.55","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-C84DyO0h6GWRxbbM56Yzf1LVzuYWqqiu0DFortlWANIUatXAEElhH0kZUuZ7HxtdX1Ag83WGF52p8PibIhC3AQ==","shasum":"9b4089a6387bc132e045117297536b09c1cb5614","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.0.55.tgz","fileCount":199,"unpackedSize":116082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC2aaCRA9TVsSAnZWagAALDsP/2wjdGUX4OecbZiJ8d14\nuUtL1zZZu3TdSndbu4nEQMNwDnesb07d1bZxCtnOxBNm1eDm4HCih3MTLc5t\nvG8otOyAFVhxZQqudxjTwwpyEeReDcGkz1s8CeZvPnK8cZZ2qMGg6OmYP8J6\nnwN/26VPp90dmpcdjSCSI2JQe2n+NlKVKdVmVkC5GygvYoakNcVO85KGMrK3\nCRvIuE+jTJr8wUXFw2CCHGmZ1kNoeg/AdymEGhXCJLVTBcqCwvLMpHr9jC1b\nne6hB8VMKbtbViqAA4ZdqkYVS9ShgMhkwAqCRRa38dWLuI2bI0meJaba5YO+\nmyh2pokCVy4JFj96oSnN4NUBegeE771FUdgg8d71smYCRHwYoF1oJu65qRmg\n4ruKiId7mQhVC5lxHpL1fdwL4Nv97td6JK+SrnqZYoEfgRef8BQUO4MPqms/\nhd/jRmMmnuAi9tcwxAsidgLmJxTyJNuDX0lAzbhnAGMBk9I/n2Va/Aqw7S30\nhrfHznZIQrMu/Yd68Q/DoZqdm57sskErR2E/NBOwnPYefvFByS0g3X4YWejB\n6eV7jaw8C9KAALkVnZsVrPJzjdfWzSO3DDr9kvdRdLLqngbpYbhWFF85zh4M\nWk9Y8P2Lsf3MZC1l2lCl0WY1JnuDnOUwCQWMO7LARsTmWIL61PnaTSryd3F3\nVk2r\r\n=pL/p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDAI4RcDGiynjGKqE010xWgFAtsK7BiTVJF6M1RJEFbLAiAUVxMSFuLs74cDYC6H3vCvAoBwMhX3GBxmaWmOY/q/JA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.0.55_1561028249822_0.8958649158798511"},"_hasShrinkwrap":false},"1.1.0":{"name":"ts-toolbelt","version":"1.1.0","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"72aecf1b2992e5859c8ca6c724c3691989f329df","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VxlS7x1gBhx+tVu0etcTeEv4JOxtVySBTy6ng/Lebt38muZ/S0zWfihtJxCDanfKDsHMhvzMOEywDIJIko9Neg==","shasum":"9ad4eb55a56a88198e9d916dab2f96f7d2ba3364","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.0.tgz","fileCount":199,"unpackedSize":116082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC2dVCRA9TVsSAnZWagAAI6cP/2sMZMTrNKse7v9vK2ly\nq6sONXqj0vAZJ8omStuuxql/2YZU0qYt3M6fHMnwyOntX8CiFE6VuhqXngbh\nULx4olR3Ccr42nMl8h8SXJRJOL0x0yKlj6nV29iwKVSmJRwDwXWREd0/ZML3\n76bp5+Q5TpRX9H7MDHKNhfXVkjaHXN/6TAJpiiwCzJhG/tajTR/twSlM2hWJ\nbmOf6ifyHB+dDKOuM5RCFL1g7Pu7mYUxsfDnR6n5VBYwMceh1T1u5u4PEqGi\nVaH5HEaOP2WL8GshazYKrsPJb++Q0+qWDViNWtluiPvUXn2s1tQIaKm8pbwN\n0aOA4a7y0hSXLWe1rF4dTwKvPTWuKg3+7Rvknb4p5OJKrQ29jFAktZW2shZ8\nCqil3PTxbaiHZhTQgUdHshy58gM8+5uu/JUBOI3alvIEmCoj0xh+8OyuiUA/\nQ4I6IR7UzTtrsWW6+4WjuWldaC6dXO6TGq7WeBCNqpa/dawFhiouR0lwnRfZ\nhwgvrWu0d3KLVMNlE5Jvs09ye8rHjNH2qLBYW/tqqVi1L0mO25pdjM0y1WaC\nYNHFj0jdG/SNY0UVRb4G7hMRY94E0mvQ+FhJyDNCdUnr+jRJWoWXlxqHSk+/\n0uxM//gtJQpCAIfvfOeD0fUE3Tg89DsZFfArlzvG7qdOsFG1Q/yimeeozwKB\nUABf\r\n=LZRd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvFkoMQEBDlkLI1BspJ31JEjWSs5fY+DWvTKB0D5qYhwIgD+ONB1Er5H/P5oSqIvP/stTxwxaHNmOPLKn5QKN3o8s="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.0_1561028437108_0.5583766877866772"},"_hasShrinkwrap":false},"1.1.1":{"name":"ts-toolbelt","version":"1.1.1","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"1fd64a750efd8bb43e514abd3f303eeb23c870f2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ax7i6K8MGt0Z+rPSCsoIpTCD58R6w/x+SJqubDs35StP0Ab1tCY3Xx6u7XRAxX67GB14uZwHSY4512XQ5MJFKA==","shasum":"627af0043bb4a0d10cd8ddf0b55732cd405452ad","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.1.tgz","fileCount":199,"unpackedSize":116236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC3O4CRA9TVsSAnZWagAABHYP/2gRsHyBm7Pw9AMzO5Zw\nkTXM+Oz7uKuU3ZtlOAKl0j4M2Ie93YS86HNZozY2q1DwnioUcsSs9eJ0GZjG\nRQUW/SbkDvPgly/wCisxb8MrVLx6DsD6jZkLm725pO/dnrta79JIn8Joj55T\nPvgBeF2O6P7dUMaLxVxpL7YDRUWPyBZdDnxLn6F8qbRfP+tjNKqHXc4463F0\n/ffE63xQOdG68M0DFmU3XWUEQJ2daOJ6k2U2YrihM/N3SEwAF6D7vV845hYx\nEtBoIbBknHxc37ULeycilS7l+F40XqbW1k0O5IS81Sm/8N67a0c7keZLJPPU\nB2c5yMIuBhPPVuJEfnlXvYTU13C1OABH9WbEpyGfdrHYW5bKUTp9znD0MQf2\nM5GDJVBXvzr/YxLh8ixO6yThVgSNoYVPIAATG9ECAIWI1cIztXfV/HsM20F7\numPuZZ0P3gSKL57cizhzDjAitIGVhucUSoLVX6hf0lRCp3SZvcYw2mDDzEzF\nMmidsI/b7xQHJ3idIKFfYhQjsxGkJ9vI2heFw4MGfbcpJuje0ymQzVGOwdHR\nSZWtcOhQrl83dJ+F+mdHIjvd+GwjLXUSBhORI203oZ34TwDag2D09tRdZY3V\njnfCXy/RWHtb2lB8u5lHgj5mFTU+4j6e8UNM+UoOiE0xLvzKRYqfLbLCoivF\nl7AL\r\n=1304\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6JqniRD1uIcke1tOCWdsa5gChki5Pcv7V5rgJVp0A5AiBvbyHcP2kNQtrS76fCYDTAIQm/JNLMevZduGurK769kg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.1_1561031608369_0.890830610304989"},"_hasShrinkwrap":false},"1.1.2":{"name":"ts-toolbelt","version":"1.1.2","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"c1f5474489c35b85fcf57404515b70dcae72f63b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sfu230K8CCb3WLdGaEteJduycvJaZL7Z8ItU//h0xPZIWBhKp067wZpL3j+hP542Os06bN6KmLB2MwjjAMlvzA==","shasum":"8b70cb60d5877e5934266ce1acef8d8382d4ab54","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.2.tgz","fileCount":199,"unpackedSize":116278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC3TRCRA9TVsSAnZWagAAEHIP/20YvOsWyqWNhOnJLr9N\nJ6uhvJb4CJvSfWmNUdMkKOJvLh7Pe/mXq5/QqV3FZSDOBLMIncij99508Alz\nWh9/FRooc6GC9jNOP/btK8BTmSaVS3Eb1c5dbwaQwX23cIMjMHRhS5ayL1of\n2JpL0anO2gGsGduoMGGmFlcJjEEV+wIHNhp29fbPJw/WNMmgaQU06/xutFLR\nkQYSV7e6SA/EPiL3ROveEzdHJfhi0lM/zu5gYbdBeVpjjugq6150EiF818q7\nozq8WlCJ/6ogHBRdMphDhz/Vc+79S2M1oGw0z1pJ0MqvAhg7jjhSibuLFq+M\nkRnwsmiLVoMatf8fEO9eO+1iRaHbDD+DgMmAmyzJT2hAI1MgcNjrHjXxMQOJ\n9ZA3ZKdgOtBERCom9Y1GjnlKSrcdp7EPcSQk279oWtfGptNzImv0ghYjy+EJ\nejpqm/WiY61dK9dKo5DwYa5mLk/oV6/4k+VEBeDis6cjdYU4d/8SLHIYyzsw\nvRtLco0AO+qC9CnDqQnRbj9c5DUhHBoHDEpA5EeNsu6/o58z1KUyj9Y605M+\nLl90e3xRDbbizzECp6iir/S3I+NMZJ/yzDR/IRtNQCVxm8dzvjPDkzU5GcgZ\nyQVN65SbOImnLp3Hf3JnXeUweChkmdB1d+5Fa3n8RaFs5E87ADkl6BCI4zO8\naXus\r\n=CuN+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICrcEDCnjLpI+haEvpyPDCJm4nnWcsGQN2MniQlWt0WpAiEArWiNtHLawTDAFHRETW35IbgddxgvGQrI9l3WXcpaRFI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.2_1561031888897_0.5278546837976037"},"_hasShrinkwrap":false},"1.1.3":{"name":"ts-toolbelt","version":"1.1.3","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"7012a45c4f679e2bb221c8412240aa0deb8300c0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-43w5QRIX/aVxsdVYpuuxo3jOC81lB/PwZTiTxY2M8g46TnjTpaup9nI1jmEQ44YRI5ZUXo6MQQ1NFSib3U7wHw==","shasum":"de2539f980222c14d57fd5bc624506c3280eb30e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.3.tgz","fileCount":199,"unpackedSize":116296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC3W4CRA9TVsSAnZWagAAlJsP/3Udlsbf3M0scWLpnWEH\nTF1NQXIA+XJtWsP5xf0h7Zl9Zruh9qm6nvDB/OGYTWaV1A403OGisp5G6rfW\nm2UxSn5NnaY7KZpJlmj0FY0z44uiuMMkIJmub1JKpT50l7zVziN9MxPeH9I0\nnjLB2U6xwymt4DbDDDmWANDMhlDhAsaQJ6INzOnx4u60kWvY1rh2lLjBZMOe\nesEFZNSMc51g0Ax/BOxg//hALJK8zkMJoxldvwaLlghtlwAvdwJt+mBwMyRo\nGS6Ish2C0xHU81fQ5AWim0bkv+RIKDBXEoijJgFwucU1VN3BeJzVcH1j2sX8\ni8gFuc38KYw1ocfXDYSarcd+DrGv80/6QThT5d1OUgT9/fVhPOk9nhBFfWXQ\nClPzsdVeq8HLS6TE5x8XQZI/wi4vXVM4L8HqRSaEB5BxBQVKhJmR8Ey9E4Zm\narV0xoXrZbTHR8fVqPHT0Y0fodwUs1B1jvx58jDSh9GrhDSPmIBbcU8jvzTM\nfGLhnLAn5i0UF8B024jUihe3chXqMdRg+mhWzxQDCqGL3bHfWCJkjNQq54Z8\nzQApYjzXNrbXZKfPF42D74QTZPwFZYR+v4Nm0HZZP/OuTw5obM7IT9I9FoQP\n7Pui61KzxVDNUYpR1iwmyAgk7AptY+QZ2mDWj7y0ZFvkcz04G/YbYURoyB14\nMv8C\r\n=rpSK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw8n+ue8So6/Xkd6Bd/3MA7bfdqVtvaKDDx7ZZG65YMwIhALNvuX+/GMOXpI8w9Vk6+f0W5wpQC4KodfwYi2oaLpZQ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.3_1561032119922_0.20375759750170896"},"_hasShrinkwrap":false},"1.1.4":{"name":"ts-toolbelt","version":"1.1.4","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"583bd6c3bbb7b64bac5f5ebdb9e797e539493869","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-y72Nz7xK/gak9WxfxhdfiUdWpRC1g/VG0/bbJ+T777FV6k184OR1PZkMDvNIHRGup7F09bQExI7v3T4rkZvS3A==","shasum":"06e7f9269d62e67c43340cb458bbef2890cb40eb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.4.tgz","fileCount":199,"unpackedSize":116302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC3k3CRA9TVsSAnZWagAABxgP/1iQVNQBK2f5vV4xdW/A\n+QtsQDEdTyQdZKon6vOGETsU4fM8qvuFA7XNaDC5DNxSpljdsKrj1cpcrnCC\n9lUvTNbGqeeryMHW1tW7jLGdLTjMo3CtTcCEZcgubuluD1cV7in4krF051+S\nL8ESD20ntLdbXPFfUrhCdRKOgdN05Twf6Me1PJ8QckqDA6IeqpoJ1/WwLrd7\nJeJtb2TneZ8xadCVQEJNqT9amoQC1V1lyNerq0aNas/3Srfnwkf2HBwWzRNS\nClXY4quy0xOskDbdp4f8xCsyjLM4uR7e3AusYvq3XKrGC22kx+knk1RyEB5q\nMGkmtyCCdScMZEpYOlN7VHDb1EyxHt1GK9L5xk+DJ9PLRWpGHl9P+8fI6hBX\nYlXjaBmha7ETAZM0rc0TZ3XvMXr6IcEZA0vmLAqxs6GfW/AC/qfIScJQ10i2\nnv3/V5wjifCs9SgyPbmpQdSSkPLp6WwVD3BpJ2nAnYEnM8kGOXW10t2szjbM\nijl6+71UTVjX1bPw/LHSzoqzC7KkqJ6Vpm+IPF0xPa9GzvGYvN+Duf3veC4l\nbUqUAs3fEGU5xG4nMBf91E00OvmQ9YRdaIDKhT1UU/1P5AepBTL9/CgI+7PI\nuNx/13GTIt5MlY+5sVqUQn1RiA6QrGyQJGyu0gsh1wuuiTX3qLBDfbs+yt7e\na4+v\r\n=Pr9b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOyKHmY8TvoorWgBlAysEBr9GH8jI2lSWZRoTyGrUpvgIhAOV1ChaLsPyeleHOcyzeV+cvcLn2SdipxKWXur2FZwIJ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.4_1561033014901_0.33828285492909393"},"_hasShrinkwrap":false},"1.1.5":{"name":"ts-toolbelt","version":"1.1.5","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"6ccda36a83590752db3d5d4266c55a176febe1fc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/rBBmcfWUx1a0YaHNA6tkWMnj8a3rmRGQWNJOrUxx0oLbainF0vRFilAwKQKUSq6ananb8E7JEt2wxIKtKWwwQ==","shasum":"648ffec1f7664c84ec7997e7029119d39c619374","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.5.tgz","fileCount":199,"unpackedSize":116362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDAOvCRA9TVsSAnZWagAAgzsQAJIcCWLRBf05kXrnehEJ\npUkcpqJe8n2D4JPHI1K7lCMIy3JdWrqlhRAwk13rIYFRs7Q2KWNSJyoVn7UO\nyAY7Y14yqBBZO8OnsSIdk7Y+Z3sJFWpS5JNBHfcjJ5naGlXbgyhYKHBfX//I\nsTnOlzlqq6mB2JG0g+ZGy5QZ+9rAjurG5G8Vb3GeGnj3PHrrxbTLmzToy+mP\nke1Obov3sHCpVzSX91EaQQIDUsy5sqDOdk6Tu1kkkt+fN7OcTPa36A+1Spnr\narxE0/28vCCtxQajb2j6Sv2C6DZgfJAKquXh9BAp6x7CxzQoyX7EhyYjvHVC\njFesbvThZuwoAtI4P90ruroxpr2AMF0iem1WAGacSJOJoAMaNMmIL+qLPM/y\nnCdftQGA+JgH8wL9wZA3q16A7xEQLPgM0L1gwyx33UdmufikI5oHJxHe7cAv\nhO2dTllE9oigIBwLB/XVVCyDzFvRzzyfy/HSr5VgNDuHm2oh8TRlssOIt+7Y\n3UVqwZ4tgmA9mJ9YNk9392QhRrlxxtroqPmXctuqCMF9vaHXXacMNR+5vQDS\n6K48ExTAdvS4XNbFMkBe+S08XIDo4PXHja7fLMZpXIVFnnTD+nN3WvD2Pb2n\npxtxZ9tsK3/lUQVV/0q+tVBxlF1DuClWzziDnmMLsus/EDYD+QFLlIjR/KeP\nVPIN\r\n=DQF7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/4xLi1PT5Uae2Dy4pPXbx0yXnEcUs3vIExxO2LfyQEAiAn+3xpY1XffA/UDKh4grk3nz0DejxUVOEek5Qr8vRQ7g=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.5_1561068463059_0.9551272160428037"},"_hasShrinkwrap":false},"1.1.6":{"name":"ts-toolbelt","version":"1.1.6","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"939ae6c64b92711135c76b7a817749b981f66ab8","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-L2jqndR5Ovdjayxi1T8dwYG7d2ams8pHbCV9fu0rKc8hUccMrCYyT/CNUTFaqrE8kvIFtp32i0ugeKP1ZEPvWw==","shasum":"f075cd99c4725ef43c3a2ff4a1913d89ac7b7453","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.6.tgz","fileCount":199,"unpackedSize":116370,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDAY+CRA9TVsSAnZWagAAP/AP/jfESlsT1cgDsnbC03vH\nd6CXRfOPj882+4oskBsKtQFfFRN8ns3zW/GPYqdGBaL+PjbOygNrj3n1EaJg\nXkrPoUjPZ0ZyH1jqPgyLLqNOBYYqkfh7daoPa+BFHiBC1DArEvYlVE2t08Yh\nCt2/mLRU2+pgDHns09Ec5bAX+qaB1AbnrR5Xq1t19i6xm6pmT53AWqO4708D\nXJ4J3JS4Zwrb2d/h6SaEm5Q0BhXVD80ihVjxoN8wy8g51a0ZJx4yBPedIRdm\nTaRHf5bfrgfFvrOxL2YFm8ozHosH7+c+3slnoXJ975F3L8mvQthTteo659G+\nHRwF1qWOrlUgu9pshgO1yL2PT7bEdoAmCbWTc0WWq0cEQYwNIo7WfTXKeEyj\n/84OkdiSLs1EI0WyLnqjDMlYAsVXmXc1ExgLrQUn1fY62sAN3B9YLzBfowTu\necj5jzM14QX1mWNY1rPk2J+EldQkWAFgFAcBV6KelOABhXi1jKo+M1G8Dl5O\nVLcp0oG0iA8fdvzgGLubho/VRwPDE+ShS9zYmRcvGQkerjndJusHRY2r15I6\n0UyBLINb6W1Pp0TfIn//ITE0D1e3P68gRs+Mt80sodz+QiLEtB2pHqnA0TXQ\nMwh1ugTsMKk9jwx/xRCh1ZDljCDtY44Ogr5o4AgW6Ua5y31ChPRqoCuZZBW3\nXay5\r\n=RvKn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPJQEgp2rRqcPJ1q77pPfbegsRi9t0zGEriMo9k9zXsQIgL89/uk45KEd7xKBJtc7lvZKgtRBEGg3+wTG5MRLsgNU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.6_1561069117333_0.23735590776969007"},"_hasShrinkwrap":false},"1.1.7":{"name":"ts-toolbelt","version":"1.1.7","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"b77afe6af3b3ef76b050e1ab735403db8c76406d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.7","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FhYrMyQ8tNhDtomEYHIJ4hIj7sdqI5NniXyBZy/k0qs5hRU6DrONP+Sp4IBIKOp5s25wZ3HH8xMiGrlOtBIIfA==","shasum":"deb49468387533524a67af9372796218e5a48e01","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.7.tgz","fileCount":199,"unpackedSize":116405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDOHnCRA9TVsSAnZWagAAqRsP/RnaF0R/HslLmSXMvf5U\nntFASzzkGSjAWNv8H4ROXAL9mvk+kVE1XJ3IVxQLGSZ6mHHjdbCjbS/lI2Y3\nslF6uYo6MVKJ5cXDqEVkPFy62lxjLx+fXy+UWaTDSV7pYl/hSoT1aM7SKCnN\nHalTm2uOyfWrBfg0d6z201OJdHTIHoK3Qub5B4R6eN+lKAop2h2lewdhD2lz\nmWKs5xYGyeJ3k+s6NyQcV6DSaf2hIgaWCXAsyoJP4XEYZWLXxuLnOtEQPEAA\nG3EJ8DOOghQIqqITmuF5yc6SbDjGjMz8XERyqvF+S8S0lvkB0xOrkTfhXWbY\ng/+14Cd3eX9N26k3juNKiQGIcc7uGuPCL7drw4jLjrkfvyr6Dn2fY+d91aXv\n59I5OkQA9bA44CA7s+NQDIKVzKnc/YaUrKIwtYjTM4P5RrJ/Uk9D1okpZVk3\nlUYCA9hhEnFaCdF9oBNDuSpgU/qMx+yZlhnFzeyFZ8wVNzHau/+Kt6tuaR25\nBK5MB+Pne6psmwq6w3jS0Mv+I3E2bGdgH39TmoWed0aL/gKYgcxYAGdnGByf\nwexhKqogVXrL2NUiGJ67qB69jKj2pLcSeBNbvrvfN5NZRfg5UVuxMNXXWHtF\nvfFIa6VlKq1YVdcUdHwWk37qzHoUqPZPY3jKsyO6PHDxJHPnwsXxLnWG5TIB\nq7yI\r\n=t4Xg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICie/+oFKwoo3dek9+JDaJIPrkmUCnmNXoRRZ6RABePrAiAeDbytslBoB26M9FXFXK0JYwsb5ZdgMZQLRP+TK6T0CQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.7_1561125350685_0.8277878522109423"},"_hasShrinkwrap":false},"1.1.8":{"name":"ts-toolbelt","version":"1.1.8","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"b77db6fbd0be88d1672806cfed75c4029c9361e1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.8","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4udhZaznQwtvWxkXVegMBSdSJPYaQ2ObBC+tnrNtRPZBiMmMsQALKQywGvj4PF3gQc2AdiVbAJdIYp+2Y2YJeQ==","shasum":"eed045df2ab2a6f0aca0a072cc61391d87b4b97c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.8.tgz","fileCount":199,"unpackedSize":116405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDOK0CRA9TVsSAnZWagAA2PkP/A19PRe5gYZI18AeQkqO\nVYz3gbjmXvUcLcK0lJjRex/Cjl9ixDBjrhZqRiPJ+zh/t9tQI+QoiyIpYTjY\nLHNZaGFMxm00cMoiuibbTVVm1bYse679NkPQidDakByykepvaK/j54Pfb/yU\nv2o68ppF52iVBOWTL9lcV7tSu0WmU7By3TmebxVw23XC8yNqKDou45H85iGQ\nutO7PcGg5SCO5LlGm38rng1/GEWT8azGHeog17iwRBMRFA7FRfwsMMqn2kYd\nfOQ0HSi0/s2Ce9UhGGEB7vPJ4aVCYRwgF6XZ/c+bXyTiUQO5yttJo1npwNwY\nN94u7pfjnOpvy5BhG1XMP2thRkwkwnBDkJaRMcNQCXv3SNV95MUS1aV19Jy9\nG9u823CdvLUOG2Au4BWHxJUv9ZavoNdX6jX97K35l+Gtd6dad2p53hZO5z7T\nE3xQdB5zzSVlB4zC5rFUpvwic5R/iQ0CyLnWj90ozpdSwC64YgkWbwatty4K\ngQmh5KATgtfC2XxKxJdMs0Fup8psCTQinb27tyohr5FORStCJSgeJtTgIXDH\nUzlGwTGRagx+qOmPvEfNIasp43S+3hIgZ9sYLtgNt5rVG4q59cdn2visD5GF\nWT7lzrp8m7Wj9Zw3KzZWkgSperbk9UFAYgSQ3H2mgtKawUiBjhOQenDwPiZm\nXGla\r\n=Vjzz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXx1XeMIrGUOrMREKoDreqWb5xzch3StCuKwbdgMdPBAiEA3JK2Bu29vMs8aKMLPV5M5KjzNiORPjhkN4TYnrYd9ck="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.8_1561125556204_0.9552542548078291"},"_hasShrinkwrap":false},"1.1.9":{"name":"ts-toolbelt","version":"1.1.9","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"6678f4945e88d8cbc4dbaa7650a3565af7bceee2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.9","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-NykrWYUa46vp8I+4nQ0wbq7Fg5tAzJM2o9IO6NUF0FP2X+eb9osK/go97utcVnwJ76+qK1Vg2kQ7me4CvcvwSQ==","shasum":"3055daab849845a4a6c303f243d2508e5db53c67","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.9.tgz","fileCount":199,"unpackedSize":116413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDObcCRA9TVsSAnZWagAA4T8P/3qwPd7jocca+1FhRMVb\n9mB92UQiuOj27//O+47TMUTQ7T+c2ObPEThy/0y9QQdaYTw0Vftlljz5Rm26\nKU5usUrB/zL4ASlzc71Ar69foqS2oa2xFpjPXW9++L74LdY10n+8mWA2MY6b\nMZYIgpGtZcL/ENri/pKwnzUMZsaQDofREBa/Sut7z6KPUedKmSL85ggnHQYv\nP3qRBnGuNcqtb/Np2rVo/ahEl3BPJClDyFC06uN/ndGBDdlnrJfja12V+lVG\np/JN9BHFbW0cp7rqAEhHUKvROjA4s/4VCLYuX0RQuhUbN7ZC1NKammI37qUQ\njWbgBdGG9v8pr2B4KCyXLe5pem3L8YJ89hJ74CrI8bX+zFcWG+s4WjKxtI1P\nRs/5Oj+xYUwhw+rnq1egW+7EfJjrW1DV3kkxoWk/eWsMsxjPXmKaR+kPpH1n\nMI8jarcYZ/28lNuXNGyjlMYJfIEo9hn3jW26KCC7RQU4Bed4Y293Nq7McM6r\nq+tl3H+3bSoorTXFte3O0hjAwbO7+AlRK+/4a6vOd4FkNiiSixXsCLT9puV9\nfAUyDGO3LuAB8UQomdtrZMIvF/va5zPVfu9GDqS3iznES+X5JXPu0ZtSEMB9\nBxpvCMhnNy+QSET1gw01eL0kETLU2nCnBDjzjxQgyf7bGTWn9jcsEZ5V9T5G\noidU\r\n=nrpK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3ygdNn4TSRm0bUK0kgkVyGbbAD/blCsX9DJliL08OlAIgaoQfktKR8BTaTDuZhY8KIaTf1+OxXqI4R9lZtWbowp8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.9_1561126620088_0.650152064066871"},"_hasShrinkwrap":false},"1.1.10":{"name":"ts-toolbelt","version":"1.1.10","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"08db3eac00c91b7ae85d6e6461d68f3fb28f44d5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.10","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-iro9gb4f/4O4SkD3yD+n6pXq0GnCqCThPcAjOhQLpIQbeyrgkEs31qMtWGru4SbCVAxqh6J4Vu323XAkNIXD1Q==","shasum":"23323f45d2726f07e90714a244fddba583cb9868","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.10.tgz","fileCount":199,"unpackedSize":116415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDOhRCRA9TVsSAnZWagAAi1AP/RELfSSUg6PA+Se4/w5P\nxInLw9P9IKjYNdcPcMZIDuf2opID1KnVwNXBtqRqbIn81YRT7HvuwuVh+FWo\nbYHqdE9NX3EBQwslr6zzgoAdqAXLlMednmCtrBUI/+yZu86b7zkD/1kkWCww\n66T3mjnT9pvHnfuePtTrkpmL5Mc5v17KcNkO7Ubkhq2mZ4v/mG+2zlllYAix\nie+irRJOT7E2tdyQCtdOLzQ8XwfauqH7I4UFObA8FlZEeZi4X3X9MwTHzKwW\npGHoe6WM+hszWQHxXWN7DQvOzsE4MukhMoTkWYxhFd50CSn6QNPV9fLwEH2Z\nZik8SwrTYnQ21ulWO23a0LmsghSKX78xwD1NVJd4lOC8HizrFLhV/iO8oRep\njoYIAhcJ0nkuhsed51xM0MQJF2SlfG6a1Ee7aj4YSTSXxdErgMXXN3JJVyFr\nxwg5naXnUGsiDIbG8JWHsKkkNDKCphv3R5FOQcu5nMpSMlFV97W2gmnkdUhT\ncVBcNcxbR1XjKMB4imt5Sj/tfk47hR5fba3Kg9M9RvGoVVjsVApKOVF1FwiO\n7hrCXuRBeiufOhrNDYS/6uepnQ2HQdVch6akmZ8kvSvgh4QH8SsanHh6dkll\niOJ4PRmKUMhfokrlqXexRYN/CmxTrAr1A8bjVkL57BS1GmAgk1uVPR4laJEc\no22q\r\n=3lzm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBEen9kG7BuVzduQjU4fms6t2qqSeAI3qchQkFsR0GCgIhAOnJrjDfPeMNrlRzgm4/sa5eFR9GuFTny5xY7yxSH1/v"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.10_1561126993273_0.6094645354644368"},"_hasShrinkwrap":false},"1.1.11":{"name":"ts-toolbelt","version":"1.1.11","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"b57e1d6b66f92720d4eac6a20ba97934a1117250","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.11","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Am6aPImgOSq+xpnFuqO+DQhw7QyJq5IBq9ZDYoYryauMLuyZz45qP1VJgVL2Ho0bi0T15pJ8kg8BzNrWZG4h4A==","shasum":"964f4174548793ac05226eeba5f5d11da23a2aec","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.11.tgz","fileCount":199,"unpackedSize":116416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDOiqCRA9TVsSAnZWagAA2ZgP/0UGNMpg5VnqpvB/HdJP\ncuOQerlvcz4DX3XDkReIRa2pqUV+z79D+XFGhWuz2OpvEm8QU+Yu9+8rxYMI\nLlTC06PSZ4teGOxccfbm2QANOAxxsGT3PezC7s7Hc2nJjYJe8pE6Wzaw6P5w\nSMxAJRevIeAlPkG7eSMv46j5H7T8xt0OVjsPxzmIVOJ36CN8MQ0VDzx0i42E\nVg4Ep6YqRhNDYPS1UuQMm9bej1bGNTsRgVH5xcXKesg49IPRAxwfUs4qpJs5\nyq3FD1+k+KZyfhBERXRBott65O2F6n/pFL28UTgjdWDR/Zlr9UjlXFcRvBU1\nkggVt2CqFmWhnTQW6G+zxxqCQpf2VZuQf6Bpfe6+wRXWHD0v9YTU3thTEPIh\nwr56EraIIPMx7QdyXjBjDkXjEPfaXJx9XsuFPlRfy6MRQ6npEDCseTwbSjsc\nA3BYkrK/8euuaVFBKC/N50qJHuPK1yMZ922bE6RIyC0AzFOKJk6I3JbNSgBN\npmzAvEUkOmlk6M+WfSyztwWBr5SEjc1AY+E7dwhEgBZMwpYczagoCLNBFpXs\n86RLLQL6MNri6T5pm//kPbxn9S5mLU/zQz+gUkwo9YUfYXR6a2IqUTnIJLKU\nkMMIBNf9p1Xw0ZskfDO6TwEF43wFm1Fq0nTG5ravlc9RnLdpzjpDGaW/VEys\ns3hP\r\n=Sz8v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+A/c6t5NPcWONt9dSJ+TpWuosqoSfEC8aBPeZ2fEguAiBKE9gjsXdeLgmTK25n0To/MzelBJ++lG49W+pwY5iM1A=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.11_1561127080103_0.7650698509795637"},"_hasShrinkwrap":false},"1.1.12":{"name":"ts-toolbelt","version":"1.1.12","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"4be8765bf6f2729f82fad7fa225bf2b649e5337f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.12","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6nTEEPq5gZcIyWtNgmB6ccXfD0Fq1dyNj4gPI+uw506tyWoP+B4R/+PnNwVAarPB4Dk4uNOVTR/pGvbKHoYpCg==","shasum":"203db9b5549f096efb09f3b29ab0d13d390eb474","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.12.tgz","fileCount":199,"unpackedSize":116480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDWhsCRA9TVsSAnZWagAAzUQQAJ4+TxjYoLuCBc3qUh/v\nEnIGQfexs5u91knyvUbmefGQlpJm+KTp+vuH8bk/hIxsnk5nSznYot5GfjvI\nzS9h529U17WTDJMpDGl1KpQWTMPWfPMoBn3O/Ga1xIKEulhTSoI9xqrdVXMU\nUy03W/fEGluyJxCd4v568+vRD49GZ0GufK+kuQ7eDB8D3OZD9w8ka+nwOzN6\nHMQdRt4n4eimVfFCDK8UiGPnhi1I+RhhTC6fJ+vTHNlc4+8HRq5n2JA7NWr0\nKgSdpEjrw/Fgr7xeccnEX/qL3IRWpiibdIwL9VQDt+WiOXPB0nGGw7Fxw8t4\nJvcKRDp5UgYx3W7KJiN4SVYBAbeXJrhBofL031xo4+mJ9AvIr38O+3YcuADF\n4B30lo9WovDcDUqv/Bmtnmpwy1g0bGUOyXvZ67JmK7wR3NpJNrMVzwsjUMuA\nkl+WZAtqNNISahq0oqtjHut12wDd6Bvw1ij/CkQ674HkCLS81G/IEthxl3A2\nK1hqAkiz3VvWBAsPD+KdRGBlj6m3Slffzya4vgcRBYrAzkOzbzLzyTyKeIgY\nT6/QRTXiPbzaBtcW6nTzUkQSsNiahpl6lPJmMx76uca8L9GymOcSC5mP9Kl8\n4enjrDPej+n/vFZDEQc9FgDCv+hOndzij5UBNTYKINGWE8DgcVs0F1+CSqAT\noDSw\r\n=60Zj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+VBqxxYfPrhzs4MQEDVudBT6AmEIWM2Wzu6Vl+FpOvAIhAMgdelIF/I8e6Iw2IdOPhK0pNe66Dkb9KQByKWKojJDh"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.12_1561159787485_0.26518105783958634"},"_hasShrinkwrap":false},"1.1.13":{"name":"ts-toolbelt","version":"1.1.13","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"095281be9c1e3f75aec3e2f02f34c3eb5df95cdc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.13","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+ON4utEQ5hSgrE2YCW9dbN2eY6wTO3azGiczZ2er9OVNkwiBSBCTFK0CcU8w1o8DKZnTiezv0JN3ZiyudVFmrQ==","shasum":"deb604d9e0281c0df02e5be731fb31dd60046a56","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.13.tgz","fileCount":199,"unpackedSize":116473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDiAvCRA9TVsSAnZWagAAfFgP/1f/b3salRMrBImE9pqc\n8cocpT5uZA4d0J4WDPSojFWD2WWw1zioaCm3+4O4xPwdB2ueevX73fN4/ac+\nFWilEPvMa66XYEzqSMV0H0IPXfRIf/kHH2d3kXc3gVSiKz/b8+T2yJ/d2OO5\nNCEC9vwf3V2Fim4LUHon8gzztyNgKwoQXACzebPusI5wHYO/vlhO/J1I/08Y\nfYWKpfOeonotRXCHjoPBCLRnWB5+VbNlmcbKQexjPkjK7NSwBdFvp9Bn8Thd\n5TmgqKKERS2IXA9DWJHKTAZIKtWTVQngNs6ezPzXlXuq0FznJUq8RxXf3B13\nUN6TB5V5STOCWCxdNU/KDhpHitNjN3a/ONS5nw8oJ7lOrBkM1sA2XvcpYfd1\nbu/BSCHgjOTH5lf7wjNFZcQi6C5BKiWN207X+03aEc9KmXN9A/8Qoj9mjgPv\nSVRLTWoAfz7xDMns8XqSY63mTSvqYmDuaXjrbZlsfBXGgci5RxHPhHfaKnoG\nJXqf8MH0CCoWH+MszKQWxhExbL4mRfmymWVgAddbpfR7btHTOJgzPMo4mk8/\nERg9u2/VOA7tXLgmypTiVDmtluN/RK0JriWP12/e3IB0EkCWrMcUN8NHGpPc\newKTtriaZfjlHA5rmGedPF/mUpdXAAdzuTPIvAyn/BxWUDum0W4EPeZnC7pJ\n2LKh\r\n=7bf0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVRyZLjv5qWU5Gddv6nHStVeN24PqKRjKVTYV9bCvQkAiB9qvN95R6Ko/+8PG7M5Utc31Xf+tgdyVfICofAnPzkHg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.13_1561206831159_0.6998366158957448"},"_hasShrinkwrap":false},"1.1.14":{"name":"ts-toolbelt","version":"1.1.14","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"5ab3a25b90d512bf7465573382478467d5dd3676","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@1.1.14","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-3jRUtgz5QsWfaga6iVQKNnZXJPWKrsRoCe/PeYh5XPbtq4mEPSCBT6197g7QJn5YLznzIv2LiwD/XhrLSbW0UA==","shasum":"996f25ce7bfeed4191717212970af6d8414315e8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-1.1.14.tgz","fileCount":199,"unpackedSize":116518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdD4+FCRA9TVsSAnZWagAAxeQP/0193ywH7Y6tLXgh27uk\nZ0ys7jUw0OZknwbLNykvgtDCZsp0jtujbqiwHSN9ogh9KzdclcOcx9FAIrqX\nZbebY+jJ401FNn9D5CKiNJlEFmnZUG4AJE4fadDdN5msPgm5HkTGIV9ok6AB\nBFF2l2czVX1v/JZmWei5M3swTzlmmS8AMaJ85R/z1RIjrnmV3kfwqeckEpSc\nHM8L/WN1CPvcA9Nbmw9yGoMwfF5KRJnMdc/FWP0FeKd9V06C1lVjmPpgOTR8\nVIG9m1EzHiQoTxSP2jccAWbqqSQOsNkdpNTFqBADmN3qq5X2Z89AwKVV2ZKd\nnfocalx4tweGDvUYHyBMMoPQ2vclhyaXaqEH4LHlo4hZlHJZ9Bpw5hjLykqs\n6v9kzitWmlVoSUhxtsE0OH7niBtuMO1AIrzKvFpivRAqTlV+XfvuBnpnSyGX\nrrGBP8jCOrd4XUutitnEChN81KRsopwhNYY1360JpujE0DKxz6gaqHym4fAY\nAdYyJrccWwWkB/xGrwf8n3/lxEg1e7Yk7wz4S3ws5unv0OFoG70heuhm+EKN\nSkEvWGo8S8ZU+GFAg0MwtKcpQaYQgo57IC0B/IM5FetKu+58h+SqLlhLmVnQ\n2LCTaPVKHW1sS+enaxs5XCLucENrCckwQN6cE+OPFb/qioTwZT3Kk4KKuzck\nN3YB\r\n=BUAC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBCjnW/lKyT7yhUlqn4dTRPasoIYFS8zar4dUd9z2PqtAiBAYKwZZ1jkfn3mX0toEEsz+6xRA7tbAq4Tz0zMtYLpxA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_1.1.14_1561300868191_0.3854907430831247"},"_hasShrinkwrap":false},"2.0.0":{"name":"ts-toolbelt","version":"2.0.0","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.2"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"1673bea6fed6a6293d15384d59d1959256c002fe","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-41wm0AvWdVdsfcZyk6dAseDsTpFlF+tr930FwZbcLRzoen3WulrmqDr6rA5JvW7xInFQ2C5fDx+BOEFaS/hA2A==","shasum":"085aad9528f5f33e89117cfdaf0e0d3ea67012d1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.0.tgz","fileCount":199,"unpackedSize":119474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEo1eCRA9TVsSAnZWagAAX8sP/1hpcqdjq8/IdPa4Xob4\nKv+vYKGklwkWJHeDlDSJVwWsKc5FXgZv/mPIhJgK13OtoYbpcLlSEDEMJJdM\nH3BxPlzS0BodhAmcXipRMMAT1KfjscLRZakvoes8gh/9S8G4DJoXGN18L3Xv\nqcviIGaCeqbeDPwC2anRgy79P6oTeoWBKkGQICRm7CWRo5cqvyfrBifdD7Yx\ns85NMk/9TbnY411k4K8OpBj7qktuqCAFMf1idm2V8REM0vHaKnZTno+yf1OE\nqRsUXXD+BdBL1GLGsC1PErnHTil/JShkY3FPAUI6PvUyDDPYshPHWBBxS3BK\nsrwCIzODO6i/rgl37/eQuMruJztXdaQ6WzUw9uaYXpDopeqf1h6r6iTuzFl0\n9zak+tEcbB1+9+/fUPbDYqfFBF5mhND97qS2Go8m5OwvjKUwrcVmoYZXxyMa\nzmyFFJ+G6ME05S7oPlLMi9fLIcgCZJRXV1gTGlWxeFynyjKeEwh0cKVveO0L\ninqcbSTv0+x24BXZwlJW7alr7giDdCwPZkf+v0rV7u3t1uHaSMEJgRPd5JnS\nWHE0qh4fsb4BkTFYg9QqN9ho9i7GINme9f/IzYQAphpb0DOelQIW2HMN4BHO\nWBOuHK2UPaNQhs5VgjbxXNFOHnCCulYPLqR9DpJQri2JdECNCITr2RNo8iwk\nlUHp\r\n=RuXX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6sZICLCZHUtQsVnQQO06nJLTuef2UMK3uPvbVtWT9EAiBxQ2edJVEJ90CYBfXMnj3frD7LDxoUtE2GQkK8bQztQw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.0_1561496925692_0.39647390876771826"},"_hasShrinkwrap":false},"2.0.1":{"name":"ts-toolbelt","version":"2.0.1","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"b6e2bd0c9b632fb4742e75ab0f8078b72a329cf6","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RxWhj1aOhZ2paIH0vhvpxniI4YmrpF5AdNBhhxOusibv8HR3UZKdji8dx2gcs2TOJnDg9YpiCgsdQnMQmOPUrg==","shasum":"9c6aaa35dd34a28bb1b52de8ebca6c7c53a9fd4e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.1.tgz","fileCount":199,"unpackedSize":119474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEqQRCRA9TVsSAnZWagAA0+sP/32jcSIEXuidzfS1Dq5s\nsI1pxakXsddpN5YRUq5EL619lgbzuznEb1dfmtn/7mY4+lD3L2ixUT8/6BtA\njJ6jAo6N/3xaRLRqKrPaPkKFFLGp9TwJbJQxukfr2C6Oyk3JcsM5dxXrvC9g\n3GTPOZmmwhe3fQcVLcmh5didwacVsAycB1FWxqYmv1wRo5O1Tl16WbvYxhCT\nInB6T4bHp2fnl10dufm0PgGJUE0Nzio2f3kff46MhSEU+hIO80EwRxiL/x9H\n2pdI7VfKPUUziMOBfbO9+O5dGWhiWrDEKTXRnIgxMurQm8Yd0xsmWRoG/GYs\npYf4vfT41nstlY7ujhMX9TMpUK+GtTpI8024oL9of50C7Q9oHen7679TcbMv\nNsCi+TvvrixPcLcD2v6JXVbwqhnmjc95KyEhjnavpk/Zikx8HfaX9KDf3hJR\nZpd9fjS9Buv+Rx6Lt8kXKfJXl9DinfTp3C3bdoKElxrrG85tVO+K8xEhY87c\n7b/VqfinIBRZsyy+NSfqXH3rWYvvnnhV8xOYZXHVWasOGIBwEVYISewEZpf6\n7JlwDEX2RUNnzqD5VtS7uICVYVcWiRQKCqmtdPRnBPbOt+4qw2plz/mtmXZU\n5dljIjHb0iuNKs2b+Sl9jNjo/lBe8/x6/JJM/jLidKAbxJ94fimGuyapyAPV\ntc5K\r\n=8Bgp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMNR5MU/vmX4Xcpy7BRSGoJlrlYPPbphK9YS9B6xdJlgIhAJlkqxq+P8jv6rGrAm2c9ZY+BI0umMJR2MDJPkWWr7Wl"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.1_1561502736701_0.8439010216153755"},"_hasShrinkwrap":false},"2.0.2":{"name":"ts-toolbelt","version":"2.0.2","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"2fcb04f4947a860afa1ff1e5fcfbd7d66ea08533","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-BJ0sOP7L4yQZ07IGNQzTRfmF7555o1pPLyVWPFbLmNRSIZ7inqHchEF9tf2PqslqwkxO7s9Qi3dSa1YXJhffFw==","shasum":"1aa5ccc10051b1fb40b88ddf8fbb16208e6d1686","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.2.tgz","fileCount":199,"unpackedSize":119922,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEq7JCRA9TVsSAnZWagAAQ3YP/iCXk2xqLL0tNQiXlmGj\nNYQNkcn2tnNuCTWdd4T5JXGKJUPMqtLJMslE0o7CauzzvcUeGbUO3EbG9faF\nRkv+Z4hVY4XKa1MdBRT4Fi0D3WZyPiuV/TtvBI9y3P8v16H2pMDM4BA7OY7b\nzGPIxQMLIDF7Ekj8mQ/EW0a0xFC+xbXrJRBiv3cOapkYmGy9mdVqFSfvNsUK\ncQkodGnlFu2BFsozPJYOcyISyKA3JhDi7OVKYQO0eaJu8KE6r2RFiyfBIzxy\nfkWHgi6fkNxyx++9PL+zhRqhlk2/CSBCD+gxxILD50mXLcG+lM9yhU91kOC+\ni97Gr0A/OxiSQqwCDtOgiRxQ+43h66StZ8XlvkMDZYDepdqFMT1HlW0qV3xQ\nSj6vlcUmDBigXHvvsGUrDZSBkgjWrm1Hryda7UNYVocyDdOWGrXOg/aru/q8\n7lKfIGUVSelxU7VXbaD/yTUurWH+t89EE3cegj5ASEHaLT8HwPrYrbWCkD0X\nBxyOmH0unV/N04oQ62K9ArHW5S8zYpIHuFxOtZXjwhWwyUb0D96cgCgThJFR\nh9RsdQn1ga8d8NkpBjF+QN8BIehE6hoYghuiu60DviVcum0QnmC+AliRO7x9\nyt6UPyCKntA61o1vWblIToXcG3vPY85nY6nuSo4lhR12ql4kqN4tGPp/NqKU\nvk8r\r\n=jpAn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaY1eLsPThMUSGm5jpOJXI7MrLiRAFqu73icUVLrHk5QIgEbmh1JyAJObjOZljJr+Y4O2AbWwPwbvi+Mw2wojlU0g="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.2_1561505480425_0.7558124014156906"},"_hasShrinkwrap":false},"2.0.3":{"name":"ts-toolbelt","version":"2.0.3","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"5dffd118a03df1f9322815e99dfcfd1f6cd00bb0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rvRcZlESUioArVHTW9IAocVQLTQBcIXR6bBLeDtDS62cgQ5epErJc5+VIAQh/GTnksQB/9VsU9begkQPdDNcsQ==","shasum":"c3c008a7e47f4895765ab683ccc8213e83be3a92","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.3.tgz","fileCount":199,"unpackedSize":119883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEq9kCRA9TVsSAnZWagAAbkEP/1UrIbyUxWg+kP6WzSIp\n/ce7Ml3DZ/w8p3VArfOjhYbrDfaKYYQWSjMc4x/JDw18FHJYY3JdaPmtITXF\nmK+EeIx3J08zkoY4q9dBhJ+pvjwhE08ZYNvrSZHoetY9NPEUV4rEGsczZ0z5\nC7xcFEt6uXQbWlgFYgG3Kw+gYs7AI1Gw1QZJKxJxnxWHKBoMv6aEtfTcW5uj\n51x7Q38dZIk204/770m8ATyRscm8faZl7K3yQnZ9uwluxHWrmpI1UmFfRo3z\nM7tDfNFEYTeQI+J91JxamrtuCfVY4uBZfYb6Uvvqct6v5CRkluinJeDXWfAp\noEAS5BtV/FuaIuPL9DI7TD+s735MDaoDBQGUD76JeDTHclG9zNg7iwxVeNRo\nzLreMgjEX+qAHiCGdEz3yOFNcjzVegomeLkFbJj1b7Ex0ky7swz8eUc5/Irp\n8Y+9/3Yi+Zzy3dBoRcB3oGPRLv+Eq11aOPD9nWcybebuNo/EbKCPkieSBpcp\nnjnNLzg+/X1ZwDTcRUkxZ+8xfn6K1vG5ZN0gojVnkBq62YU2mHtH0obS3vNh\nYDWrBs4mrMB4MVyw9VrF+ABpLis12xFGq4gGopLlz0nSXrCF7q20OeoMLo+H\ngYitiQQvm9eHaitPeusdNXy7BKUc+H5qWGeDyZhMWZnAUvQ8uzqJSwxZcLgZ\nLu4G\r\n=9tg6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHwOoNhw3Mt9+zSRMsyDrrePcyIyf2xEX/qZvUNwe2NoCIFmSc1ERVaTusy1p2fdgp82IjYjUuVBq+ZCT9YoHv52P"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.3_1561505635544_0.3800179161994548"},"_hasShrinkwrap":false},"2.0.4":{"name":"ts-toolbelt","version":"2.0.4","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"8f87c85cd45aa75ba7fc7a6b4febc5ee3545c03d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-aMTV1UypVs8+BX2NziaTvL160ttugWQCYAe7Ue1dWSYtG86CHdtkDff4u++8dZPy19bMTelJ3kFF3z97QewvpA==","shasum":"00fd8410e434f6c5ea711f8df0117425d63918ea","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.4.tgz","fileCount":199,"unpackedSize":119912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdErA9CRA9TVsSAnZWagAACI8P/0+Cls0/47yfKnwoOf1L\nfiqydNJYIG6IWNr1hHW6LRmR8KGdcWA+077FToY94sFCs+5o1iNjyUtdq+UZ\n4lj3nSWP/59PV7LvEaXVRLqCte7JUjpJrPar3ACUb4Mjxf+tUN1j9oKha9oR\n9xk9PkRjzRAFI22n1Q6Za47hZ90JK/t4a1teRkY6FfWn0zgvyz9XJh/O2vnF\nL16dIMvwyz2jCedexCOFZl0inNYAwTafaM2hJtvxdPKlwrd9vHZasZHAjGi+\nQPC9aAhGG4cPcyp6RtToOKGbVfN7JXxuleqsCWFqSUZFGIXZk6rP+g3NV3JR\nexLEO+LZ0bPLAADswEw9EFVBnj88mgoYZn59+jQroal6mQ50MkxL81j1ueJY\nvuxXhbTWZ0WZa7FvND70lzYuDbOfy1MrRQsPtmthYojZfDFIrU3Cl+x5IZUa\nY63Neqadxou8QhCKjhmzkAuUTtspfNPzqZ+K35K/ApWgTA20SED/cevue7cw\n5ttAzHzpXIYh7WpuDLvrEzzBFfWnNn8CBz1gRlQKU5DPa6C+Gvwu98bGUyUw\nDu1ev2VYhWyyrbiHf3grs16FKNss2PLQAY+WQLfr0gXD0cdrpGdLn8cjf74D\nxPj9FZoG427LErcTzTMEwtdhyMn7mwLovd/QytUTQ4A/A+CAupJLux7TDNcB\nFi5c\r\n=S0Ba\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDGH7HAJiPDYB7qkqCQGsmVBlpnqFRs8tJ+bkwR9Vfr0AiAyKW80OerJgFfhOzzCz9Fx9QP6y1xn83bixd4Io+5wCA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.4_1561505852299_0.5204852586382895"},"_hasShrinkwrap":false},"2.0.5":{"name":"ts-toolbelt","version":"2.0.5","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"6ac46a5b63656bb6f4fb49ca5e226474e185b4b3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-oZDeGWL8A82JCqAXHI4U0CQLSTgMFgzPlZQPd9kdvMrceNeWjHJ5SvFaVW5dt9GEWZaAw/2JdwqGSACY0jsKRQ==","shasum":"dd03d77bdf2e9e5cc99883c4aefdc85e52b51678","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.5.tgz","fileCount":199,"unpackedSize":119912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEreQCRA9TVsSAnZWagAAUO8P/AwezodFfkCZiYA63zwU\nnfvXVF6GaCakPZ+/n1OtRUZJUtL2Cwt/02idsQXjYptz3XEAZ8HQCjO/CYhD\nHQU/dSS69e205y89xKDOiQIWo3jaKvb3WS7z9DNM+ZsGlcFOw4HMqWDmr8yk\n9jIpNkjuLM9TK6r8n2u4rXFoq1+YKimpjrQ3aITKI2Y5yXfPT3ldg/YSIpOA\ndBuLTx736+LZ1ehj6FsQsiOe4xTOFskiBkNFcswbus0acj1LBBQ0lABU/5jX\nlVWuc8JYb5LhXth/cZZL+j88SEVSKTlIEkfLgD55lHAoqjmwtEWHXkqSlhHp\nUiac7M8NcMhm07+QsPujI3wwhzDSvlFCXTCs+yyqtKaCV39ThKj+wu8fGPdA\nMOhYbvRsEjCbQPjUmjCyUA/YYw0ZebxhXGQSb96Kuj4jlGpkklBpFOK8X8D3\nKvvFqiMWUBy74yDhFxw/71E9hjoobfWaW80FydPeWzaWlCGO4sIMkarWb0cT\nSzqVNv9xLrq3ckp7QTbPzjJxyDCL2op7wUweTd8ll+U7mFli3yWXN74ncXYw\nRk9/oOEobOR7/mOdLRCi7EC5daeBkOwxYctCs1lFR8ORmIGsFv9FJwm3lbTj\nyL2IKNTvtR9vQeaBXDi/1a1eJCJjAOr/PlBtb2FA/pmMHPKJRzQA7Jv/o6jv\niEJt\r\n=Gqxq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYizuO+00o2i1+ilsAZaJlK50+BNm9S5StHPkaZENn9wIhANn9iQf8AyDejPmJlcN82g/yvxGepxlLPmGpIlX2v+Yt"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.5_1561507728319_0.10113411343950007"},"_hasShrinkwrap":false},"2.0.6":{"name":"ts-toolbelt","version":"2.0.6","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"d876976c3a5d3971392ca2d9cd0303746f84d443","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nmJpiFX3w9NxqOJY8E6xYL5+7GlOrXqiaA8MZJYzdn3BldMSbzEIC7Q8hygheUqmEkYyYUFwhVvhViytYCyheQ==","shasum":"c4015940fa673b5a7f09345a7b7af4909fae9b5e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.6.tgz","fileCount":199,"unpackedSize":120108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdErjbCRA9TVsSAnZWagAAGNQP/13e4NJjQcbQIXTRwMw1\nuK1myLCcSUJSMxT/+lZMY0LciaCpKjP5q6LXdKxUvUCf/sgfjODxRQpGnHBI\nf//C6AjM6GdE+EAtMpUGAuiH9tVHumv7jaOdaaWF/JOu6gEow/JO7bf9KHO3\nBrHAtfhD+fMEZl/DTUqhMksSBqcZr007sgNIkF/bKe5X48Ns9n2OxMLcj/1K\ndiBWSTboga1qtzMv7l2nvWLjCqGaOU0VZqNWzl0hLhzqcqAA/E5K3THSOfF+\nUAD7KvaB+IyUTHhIABomn6V5sEqURlrByjk1ueDLA60tZyPNNNh9unwmd6+q\nc8KhAkOiaY/RdU6qRWBq+hLc1N3dNYtUzMYxqx6BcVe7VEFObavIT2FJPxIP\nDAbkEyME00EX6F5sdOB+N1A3dbxh3XgiIt7Zd9BRBYlqX2jdrNJf8zlEqEif\nw1MZb++65HSA521D90t8kfrbrgoa1PnQCrfihDOs8rZhnskGR3uKBLCuXfRx\n7fHqhsqe3NbH+bMqceESmxO1+rqf4HnLBoSSFIYFa+YksspxfC80A87/BtEO\n6F72K4XWg/icOh+HFRmus067qN+24z8tO6hgQ14MvNP+LwQ+/OpDCalnOPAV\nMlr1gDIFRO7PwLTGJg6kM+m0JsVxpT9tW0W/97jx4mKFDNcCQPMZZJUw1K6L\nB5p4\r\n=nPcJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrsWW4if31rXgXa5KhR3JUy8FUvrbPna3srOP2I2HE+wIgXMFjwZsOiAXUOxesUSrW4qojkbTBCoXS7NRiysV1nko="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.6_1561508058481_0.5989401703712971"},"_hasShrinkwrap":false},"2.0.7":{"name":"ts-toolbelt","version":"2.0.7","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"7cd133d6ef8105962ede9e65117722cbd37a9540","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.7","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-gIhuFPsyGifJ2Mij4x7hG1zYXw0rqZLmkPw9ObL6jfA7ctQqm+sbeIPVfspedISI71R8yJ2NW8xn03JqoDz7Pg==","shasum":"b2fce9180f2fb7a911a9330c01455fc5ae649777","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.7.tgz","fileCount":199,"unpackedSize":120109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdErmZCRA9TVsSAnZWagAAycsP+wXCFm522Nj/rN8u9psY\nBzL4BwoX7rHmDrtA7R7E6xhsL9WR9uxyuVR+ZIONqtssbfIpJQMa3lcd0f+e\nWEaOUqaLuZdv4v7gsi5miHcynyRZiwWXi6gg8khJzS3CABSLEM0eTG7AUPb8\n4rZkrSwZ1XxuIvYVkbjZhQLxhKJqyD8e5Tr8kVWK5WymZqm3sle1Qmvh9gDV\npTpqZnf0Y/cyK2E8sUSur3E1kRYHJO46CpYlTjwVVhqFVg83bBQSn8onVcHX\nCk6WvYk2XSTLzNmV/u2E/K01h2lVjXdI7nAk2ZnXBq7li0Qu+qOUF0PFdVeP\nFMcJglfhCeKLyU4pv7M7FH1+SBJ/yjUYweP3+bKB0YfbLV1Ie3PXrLGkg8Xe\nUKRNnvsdN1QMV+74Tu4bzEPDiVz0qwC6TTItmBBwW4WwtLFZb8EJHQVVWZhC\npS7Eszn61Iy73i+PyN3/+ygp/fw7I2hEHcLiKCMHXtHq5/qo6xhK55wUZ8sa\nqvTEWyay0lufWlEnpxIfmLFP94epltOSkHgvYynZkte/IeAK35GWZqNxfiP6\nPtNgOdBEjrbpBmBELRgVV6en8tEvoXfm/5DXbTHvLsl3RgW6mxgnIzmBOwf8\n2eQp3GQyIOLlBBnZPnYfPhorQoF+jKNIvlNgIsAPoC/GmnX1urdTDk+qDEYw\ngwa7\r\n=9UYY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICCm7J4H/1tqqa18g6kdM9I+YmcoyKZAMALEe9jkf4iPAiAztr8sHHkaa9rt/UnWXwgqeqnS4EsBAQrYxpLn6NiKOQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.7_1561508248486_0.7000574335200735"},"_hasShrinkwrap":false},"2.0.8":{"name":"ts-toolbelt","version":"2.0.8","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"3e54f8d96f4ef3baf0ae3ef329d29ccd77e205a4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.8","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rVpGMSgxA//h3OnDbzjwRqrMxiZrcHdE3i4Kf2jeslnh1p/4sA5nXnU07QCcJYqeSZm5kwWbUX2Kwwl8tQo6iw==","shasum":"9f53f5a507fbd794900d7d9192285eef3e99b640","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.8.tgz","fileCount":199,"unpackedSize":124519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEsosCRA9TVsSAnZWagAAprUP/2GOck4ENQlmRUtIXeB9\nNMXX+MvYcoamoZarUL95w6XvYavJpXpZb9imYtkwJteklv8Zqi2RFSpDYCdW\nApaIcg+U76dXcuNfeXS77OnGr0QAEMLcN53ub/PmNTRXGKQ67BKa8aZZe7Q8\nVV+gYNWN2V34Ymdfgzoel0uhaRI4MQvfX+9RBQxVi0hXK22eSDe4M32prkTJ\nBhGpgFm3ye/EL8QQvQkeZ8DMnHwZrPAZBqxkDf3r66L0AHZe+2WdxnZCFO0b\nWgkqlYwWk8QN2vRhgWSoMCAa1fPtJodOjqiwK3eNTXidQahCCxklm2KN1kHm\nXa5cngxNrGvBI7ebdgQpvXU04mY1wOcu66ZWx8I7MnhCwWoZuv3CfFUMKK2/\nEcRcvf4GF0Ixi3VlOt+zE+OzXbX0ZHR78o/fXGQZCQOmfE1B9g9qC9vYUJe5\neqXkkMWluiIkCIv8FKjvB9JvKucIsMUAFi0iwlM/e3SA+0jPJU5k71mDby8g\njY+Xf+eKcnE0cnncy1uXh1oeWQQKj0/v+t1NnAVuOcfm2tgiro8ywX07fb9O\n0HgXUSz1JD5e0Xns3pIFavPac8ErsNMpe9dEI1JXnL+yiUkLVTpzVpyKKkVB\njb0syPkDEReWJnZci21vqaLJlSTqTCpY0qQgdGxiIP45ouiKfkJA6EY8azfs\nMs99\r\n=+5RV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp/kScKpDhlTmvXU8xd49Xx6HxRgn4bfRW8sRn9qBsKAIhAL1X4UEzN/doApRHefTcg3RW9eNMfTKbRq+RHOtTmYOS"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.8_1561512491179_0.4991105194486265"},"_hasShrinkwrap":false},"2.0.9":{"name":"ts-toolbelt","version":"2.0.9","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"eb30fb3fd0dd2876de9326f5e8f5864416f9de2b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.9","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-NGV5VySua27CynEqca4S8+yAiYj1wB6rxJkc7Q/rqUXfmCuJCgtwFQro4x2Ho8QWFDC1U44PU6R4tmofLeGvXg==","shasum":"10e3ed6c77d4a7141516130575c4153496fbe819","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.9.tgz","fileCount":199,"unpackedSize":124513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEssBCRA9TVsSAnZWagAA7VAP/1DyUaokNnUrfk+H9uqU\nbdziW2fh5y0YUPXwnFs08TJ7ZnE1j9a+m/A63EtuIv4r6jdEynM9w1kb2qx2\nMMYkPzzvtebB9a5hjM1MM5gqYdSGhJgBhcowRQ1vUgrEOmx9yZJYPzl/fuFA\ngEZq0JdzjwxRXJlJQy5TsJMgu0v7DvpfmsekS2u3TDSMNzgQ/v+pIy+KOOSd\nvFZrT2o3PeDjZ/HppTwsiyb6W+tKYrnSGhkkpWdZy4H20A18gvYUkiETBaDV\nDC9nMNHm4VEI6jVmZJbmrEY8FnzgKSicIYIITxoF50G5mfqI1c6svx9suFj9\nHRE9gT2Oq4maN/LUt1Y+gUs11yucs9KFncUfxiCuhPGSnqmPUu0FjfEksTIS\nq0zMsoRu9dLBEsdC/mdylz5eW8daLP9of/x2LVOKkolHPJpCgv1gq0IGC9zA\nmp0AYlHOmbrXBmUuwhD5AQAWCA8LZRzwvGxQ4KYDchXjlehKaEidrysTcpnj\nni3pp7RxoZFVrJ+3dEN2drKP1V0W+EqddQbSRGmdqX1pT6OAPlfA45CxtWtD\nTzohqC3lF+sVRS1ypqRbM7iocTovh5Lecs8rEB9yR5RzBsIBrPVddGBm3sqS\nFxSFsmEcD0qc0EFn6k9z2Pn3I7cuo2ELVg+CXehDP0s9Tru1paEpbWnoKJvz\nm6H4\r\n=GjOJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEnmq2mxEQ2Dvp7aEAF3xYX4545y2i+9nnFBdpzBTIWAiAYI3WI9uYKEm3OaO9QpIv2OKJ6nnzoTJDm89nnIGfZOw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.9_1561512704548_0.801586895032689"},"_hasShrinkwrap":false},"2.0.10":{"name":"ts-toolbelt","version":"2.0.10","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"8b1fd76c94dde6b5afb6b5f24773898b7da17921","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.10","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jafQicekfEFhyUsg7Y7+lI1BH7Fi7GVvjUIlWuohEgI4YNuHz6Km1PKbv6U+uvY2izJuNRStcxyERHFCvbC3Hg==","shasum":"725e259ac14b511730bc014a63d7b2719a6a4f00","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.10.tgz","fileCount":199,"unpackedSize":124564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEs2VCRA9TVsSAnZWagAA5yoQAIWtUC68BVIyOsRxj/cK\ndLfhFKrL5MKXwq/EVnvXg6WIlQMcXYcG29SP38sFAFkmYsXClEDY2vsW+X32\nzXnVOhcZnLrHkQ0ndntSRdXs8118iQQ2i2yFpj8t0pk4okzCmHZyQpa13SHA\nCQJqvzoFQts8rXBnsPS4wr7zMJhYZKqoGLCLelySLb6JQF7plGM/kc+98gnz\n2wMBtm7aTpuLO6KeFhuiwhCSD3IEMy83HHLsgYJ0Smci38fFrMApb6O/QQoX\nVq/tniWD56FMMvA3aC+xvzrRIy3nGI7cYh1vGHqS3OkR1HoFxwAdUhIk+Quu\nmD20JTL9cYKJK6sGSK+/kNYZBzpfClgM2840U2o5Acg8Ad8eMd+hu2vUg0NR\nmx7TH61dS+XbzXIO9hI4v3bdNJH7J17pSzs4NtZhBE6VQ6NcLabUdC/MCQus\n0Au23t8aCyBbU2CyNxqJ5crJFGCIjV7/69p0A3GaEG/i7BcFFhWPY5I3wjpP\nSeMsf/YMxztX8uUzKS7GdDKP0ab791WofTDiQRuFGc3O0myW+1CDmg4wecA+\n2imMk33PywhAmrX5n+3jVEeg3yD9Iy6UW/nrYhhcIUdCfhwrvtKPeIbmN7V2\nHn6DCDq5whS7zOwgZB/qwP3rF3spt+xJPqgB+a5WqHaibPtb/y5f8/CUZQrT\nNASx\r\n=AH8Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFggXnw1QXI5xiPo8Airryt2WW3orj0O9/piRuPGu3bAAiBfaHFO1/XepsRsJJiwupDT4n7It0aIlTY6eUCWaN1qAg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.10_1561513365011_0.7987208352009216"},"_hasShrinkwrap":false},"2.0.11":{"name":"ts-toolbelt","version":"2.0.11","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"9f9c5aae9f187691073e862cd0b1d937645bba4b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.11","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-UImgYdpfADTtA5Md35WALOq5H3Kjoz8KibZWkEKZo9pS6PNXKRl9pOiGeDkIWSIvGKKPLQl7NKf8Gd8VG/e23Q==","shasum":"90ac8ac1710030d99a90e39a420ff3c5bfbb72ad","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.11.tgz","fileCount":201,"unpackedSize":131676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE9NaCRA9TVsSAnZWagAAYX8P/jzKGZrhTT4lNUdIEzY3\njErY/ydeUSsbG5mZomX/9C4dQX5s1wmqseuI2c2KejOQ1hocwfl/vE9ndF8K\n3suF96VV/1ZE3aEOvI51v4vTM13ZkLdVeL8cguhKK+2xQL8af97rB6RF+OFh\nbfSuDuECg7tjHkm+ZtCi3fTBrcGRXPrzf7vAVvCfwLePGOUIipL4CQaq9d2c\nLgfzhTmfx6f7hK3mai7RmKegVRW9bKhTt77/lXvFsj0WiQkO52FDE3x06b2m\ngsZOVoiW32XJF9AWovVpCSQYoh/CuncdydWSXdgoWV6Dwqk9/d+grcIGfLzA\nuV37i2YR2n8CNuuXxxQBOBNxvDkNkxWYF9414Qa9acM6+d3fMDBmSTGqgXOu\nJekv1OnsG4OWmi70lqrISCOrkoXuN6VT66Mw08e+mdrbcGP7U4/6+P3x+sfn\nPSG9XN8yvgpEJpmtvsM1qpDTuOTXWNgF2homHKIXNYDjV4Ddkudl+1TWgRmj\nj7Tmba1vULkAP7/TAeBKlZAU5XqQLU9vL2UXV4bxtS5AnonXm3jh07cTcXUT\nKJIfxfLLpgh2WiBIujL9PcBbaPeb4YvIeOFR2xskYRMPKuIjtcoKHU6veTFY\nQdwGgVgZnfsIj0yngFG1zrEFHpkb5H1NmANOnPALfjN2g2TLV9+gQmfh3GAy\nmMnY\r\n=wDBK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIUNRGq+aoMENYFcIK3e8v1GDjAHMgalMq9sS9BmlyOQIgQmPvs/gI+gBXJWvaQqlLSnjoTtQrPRmH24Pt0CNHjo8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.11_1561580378064_0.4508447202078587"},"_hasShrinkwrap":false},"2.0.12":{"name":"ts-toolbelt","version":"2.0.12","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"9e53ba4461cc848f556e03e50ef48b1f5432afd5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.12","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qdgFf8kyjaxyy+3vrLoEkKAoZ4YPQTYBIMP2UjoYwU0lJpGeJidogg7rSO2l3D+HkgYYrCB0OAe9XXOlANRnuw==","shasum":"1266601b0a336998acabdf314eccd19539b3e977","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.12.tgz","fileCount":201,"unpackedSize":131671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE90pCRA9TVsSAnZWagAAILwQAJLT9HVDroLMURQD7oL6\n9B9iP52sRjEqmgQdH7ylJqJvGsG+kziG21hJNcEzuXpm5ZRU3c79mHvGyL/D\nq+m24wdUe0EbQLcEjRPUirsIlWwL7liyegmSG196jK+rdEPJXydtgxLBgUlc\n/g1dN71j8WmY2Rj6cDVSya8IngT7bedD672KLmNQI++vMr/93yNszXOD92G9\nA+ujxav+NxgKf57PRJrrNOGffv6ue6y99XBnYoEupd4Am34a4lmNxjReTXU2\nqwjBcg9m47SYFafXa2t+RK71rZDT36OH9UgPewZeZmD39RY/9uhcz2Ngv82U\ngNPWfLv/ecSPUQVdF0wYjgpbsyUo5n6yig5i1tjRUDbUrVm6TnWiyjv0cNNC\npEHr0gSrjTga24G0MCfVak6SsMpW/VzkhxOsgI3rI1mIwatZc3ASbnp2g6RM\n3uSf98jOZgF3lPm1Woei0uEskOMuYcZAKz0osCAsRGsy/n1uBEozOnuAQyUK\nr8KKGfNc2hLfIsYaZdGjl605Y0THJ6PiX7DLzp7SgHGsCmZIBIp/OxlRXouc\npt2lbvKG6UTm3dFFj94Gx1RMcOrsV8KRtKyptBx0NPx1nuedu5/iiIJqFn8O\n2ESK1Rg+XAymvZBdtvKoIDeI//k71QpDuvDa7CzLjNVueEZJ/GL7W6lialpa\n9752\r\n=0Jej\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQdtmSQ2OtROAgrnNCBAeG/vRlN31troqmgnaLANIT9wIhANa3vArP1Mm9eZta30eQcdiQ9EDWK51PZSG6gFNyvquA"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.12_1561582888986_0.3436657246111905"},"_hasShrinkwrap":false},"2.0.13":{"name":"ts-toolbelt","version":"2.0.13","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"6259c02261f43eda7a85f52f8bb0524f8496c430","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.13","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0PE0+qb3gZ9YtdUeyx3W3b/XQzu8pXnmFkj/HyfUkTiSMfUsi0HSf5sR8JdnDctbtxMjhffD5Sp0B3Q7XMYDtg==","shasum":"d8f244b7efa9ac32a04443b4e535238623ec367f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.13.tgz","fileCount":201,"unpackedSize":131690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE+XxCRA9TVsSAnZWagAA0AsP/i0WB5FYvV4zMsw1TwxX\nB3nqumdFos8r0F408K7+sOjw7quOandSFhjCFSCEDf81dpT8TshnQMuS7mot\nR8UX8nhLNv/RTDskCRVRZdcFMqf7cLnkyPTYzB9RQTdZkwXdrQS2BZr9Utbm\nEbmsM/5PQDAZ2Xwe2hsUM6RZgB9GghVUwjArz2UjtNR/DO3YD17/AapvKj2n\nsYVAFG1LC5Jp/zLIrTt9frHa8FM3I6Ki+aPdFdeXOlkwOTpGLwWAZz+zcC13\nINMmVYQJUCOcaIolC5zjYEsu/tBjW8cpCH72Fj2EYYWRmQH5fnRP/nmZES+A\nJzZIH2CWW7DfdblwVDCOavQ2gFtRVOMDO9SZQOgR4D4yODR538B9aLNFqvxq\ne6pVen4uVL0KxMFVdtiqC5gaNHCdQBceSMt2G51Wrxglf2C9f+Peq8OFBYV/\nip/zVS4oK1qtpfuN8a9iTBZlGQSP87e4uB3vrcx+lBxRvylhFZ7zx1ByWw/6\n/tkq2u/6GOw5JVkE4vmcmucVdacsIJbI2V2H6TbEbPo2CcJj1bMGqZXwTL1b\nO2p7DzRv2z+HAvOF3qrdAI/Y2kINsfD3WFkzWgKszy5P67WfCxidICJ5qLCh\nwfNCzS57AvE5uj/t9MwFHaBlzf1hR4hdk4EKjVhMUuVIqjTRqzIDfp4+Wj+N\n/y2F\r\n=yLyx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDL7DVoZDKlAOn+SRfsc+uqo6PGJawE9KZ+iQHiuOsokwIhAInF7HhG01AC056+oHVahGLVAOJE1qnaTCzsg9bzP//i"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.13_1561585136400_0.1829381871615574"},"_hasShrinkwrap":false},"2.0.14":{"name":"ts-toolbelt","version":"2.0.14","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"9e18d8465a72cd28d94452d3de6db4c75398dff2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.14","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ladV2Sw/U2lr5wvV4/bbBpq844Z+UvRift8W0mB6zgKtlMFWKSGQqtwj3bH9PXISfg3Zc9TivwRVl9XhhmNZTQ==","shasum":"56acff31037ec84a420ee86a32e3f8c8da83391f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.14.tgz","fileCount":201,"unpackedSize":131610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE+9YCRA9TVsSAnZWagAA18sQAIMx0yBJkO5InV7iW0kH\nOOs78nW1G+vXaEpccUwHH01xO6Xdb9BgWqAFA81As6GgOZ9yVvrYPjBAJk53\nrTQutVl2CG2AivvmF+2+IB2qpvfony4i4OmXwLXZdN0Cu/xTtnaMZndd3kHI\n9JXA7LQy7pwevsPhdQ9nsHl4+8vUxibrHSlcwHJlwTFbGnU6ZO5ageSVUYu7\n3H7/EGcba53uqn+htz9zDsAeyDwfTYmol3ZX9TZqHN/wNpqSgI9sneO3/Q1v\ndCYMhRu7yeIeE+iayCb8VoHUKLvgMB4EOHFVj203SBBxvC5M4XwDHZAWBT4u\nkjoVLzBJrRx/y+tgEu48k4rpqX2fD1GnNY7rYH4DEa+lX7Obmw7/fa8Vnmnn\nhQgGWXr3xwG3wmQ7cQqDdvlmMFvDcLUfST6BI1I2A+OFe+2DiwxZ7lNlRnB+\np/7hsHFhtI1A5EAjyhjiLFbUL7TGKPUqGIPsVQiv9MYuxqOv8YdkTahJJ56+\na+rIMIrKGupVHftoI3XikicPbPGSROkTXHnVCmW5HlY38/8wh2/Ba02kANan\nQRBbgkyfJMkuDqgoOhcDjEXMg3eob3yrk+ePB3qpVGbxG9gjtW+zKT4WRzv5\nt49iG0O9v2ow7LdIDU45TLRM6TBO4YUqq35GUZmgWCfMarEMN6DKVTcTgXA+\n07e2\r\n=z/ID\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsoel6+V3shtX8TsugBgnVPG8gAdjY0TMazLNvjarWuAiEA+jYwkJN3sMVByt1QBLpGKHh4VdiYuimPItgJX5MUZic="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.14_1561587543557_0.479272215102134"},"_hasShrinkwrap":false},"2.0.15":{"name":"ts-toolbelt","version":"2.0.15","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"f6df7196e3d03e7cce803d9c7e497d6aec185948","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.15","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-oZO/laKrNF4qbjD+h4Tzvwuk8o0DnNoCkTzbVVMgjmI4yVgvODnNqLNgpbmkPFZhaOGzefHmlbhSmjCSEeDl2A==","shasum":"1ce42fc285604029f4372d5c9521a566e1ef4880","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.15.tgz","fileCount":201,"unpackedSize":131790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFH8nCRA9TVsSAnZWagAA5YEP/REyhvUK58B7KxdjjkjG\n12/3+s/WF8+fA6KSTrBoXxd7bPchiXWI5YOp2m/2NL48uid7BLxKgm1lCxXN\nH55Wpef79k5XHN40Pe5rTQTOo8i16S0WIpBHojagO7yWyERlOs4OVmotAWM9\nZm0m+ms1SJH6JEn+KVmeNNvx7bRmgPLWCaKhTmU+1Q2ftS/aEr3Ta7C0AV9T\niAFMgJl4ZO916jgKPLx5fi78Sxi1dl1n9AJ0hPJwsZRhYGtr+hSuCc97CPRf\n4tgf0Y9enhNs+UIvUfP0uZ+2ZazI4Cfx1QjuXX147HtoACU/roftxA5rBiwD\naqPp/GEJrP6Mn2a31f2qdvC0EsR+XRIV8oZE8qu8RFQ3TxO4AEylrOabLSnA\nNHjT105eL1nAaSH/A1wwOZePc0aLOroRy9yaKNVmEyTW6y+KAFOV1Md7Gpt1\nVcpa/rI007ctaq26lMdgGmJmJ9f0O8McjLfiGRWYPyEj455toxChFJS70fjW\nu+Ya7lP2biXaagFBDnJB89ixCawerKfs5RoVkVQ2clwWvIUrL3G3tEVtAnMn\nxQb09GEpX1VZO3FKCQ76duDS/7c5S4iQx2ZUJA7q+wsROI7THS+lxBPVuQTL\nv4z+U/lXcOr9FsFJnumlFpGlCOBIuBgDNjf98bSWRWeP6SZ794blkTc/ysDf\nntQ1\r\n=Mtn3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC29FdKNFuwFfrhsm/fbx/YvX9mVHpX1mRpT9T6gFgJSwIgbNOfZPRHdJet9q3j4GRjpWceTIQMl3pKfeXWB1Oankc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.15_1561624359158_0.6895578449677893"},"_hasShrinkwrap":false},"2.0.16":{"name":"ts-toolbelt","version":"2.0.16","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ../eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.5","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"fec530db21cbe3f03b2988ff4d9cae6a154dd977","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.16","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SyUnICrCRbULOUjH8ZG9JxihNK55QnYwoNJZMd7KH0au9vWov3GP0pgKan7c8heDZsGs2NkeWjyI7GFrmpimsA==","shasum":"b7cf1d6cbd4aac99c8a7e48f9937edf2243b2800","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.16.tgz","fileCount":201,"unpackedSize":131786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFIg3CRA9TVsSAnZWagAAXRwP/iix6oF2weHTaWI4d8CZ\ncm5FraOQziKqeYU/HoQIxViHSEdA6JOZDgcLC+YgegiJtsJN+L8y7MjX/3wX\nT27m6sXf0oayLAUcHyVo+YsETQjmI7qPkELVxbcSR5PHh4R+XMhiKmgBUUF7\nyHa9/O0D4ls81OuTrpnEztqXrFmz9q3pyffDMycF9Yy0wwWlk6NKfqECyFcz\nmBUlhz/v+A/QkcUgjNCIz/0zPot9RDrryhY6jVQZ3FRew9Cp9v4qqwJjy/pQ\n4rWOyWSGWMHCmCJur55DMllUecNVCxUCo5GUZBN14MeTho3f+jCTz0djzYAB\nSzhnzTU1molT08t/GKq8juEQyN0znK961RnVXBZUJDaKVjR0BCxzV9YDYi9V\nSynmJzQmRAJZ+IXTwfvxW4hf4uEMLzzPeZ/rVLtIKH8he6xat0cdkwlE/gz4\nZwX3fUFkw9HxNGZsJzWh5fFWGQVNBzlgrVvbmWkFONulpX8wmY5dhaxB5F4O\n5TrNjB0nggrjPiLLwwWMAN4kdoAjhEB+1KU1alEjyzfh2QEQA5lQyJoYS1L0\netG1rrJQmNXIJgJz5r0LDVF/p1bYTnc3zCdWk06ye1ez/16P4OUB+MWM3DIH\nI3vfFebXj9rmIc0fx4QFHbsYDL0jH+x56ocwE7DlLGNALu7SlqhKGe2u+UXo\nOpOZ\r\n=ZwG0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp04WfYfDcbMj7Kbsu7fqf5LR2mg32ZXJJZ7T9dx62AQIhAJmOMd+oWJXkcD7ka16//EXtctfdkDgLp1sO1Yq/055t"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.16_1561626678959_0.0884097138883182"},"_hasShrinkwrap":false},"2.0.17":{"name":"ts-toolbelt","version":"2.0.17","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"9ed9a07cbf702f25634ea197dcf7b545cc6e55d1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.0.17","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-A9wO2tSUTIjWCEuHTN2s1Ybv8+CET9GqCvSLwwLRd26i5hidM9x3ufqjpADB3PeMThJhc0vkWmujtFCq3rZfMg==","shasum":"a1e5a1026c6bfbc2cadb337bcfeffe056dc6c0ff","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.0.17.tgz","fileCount":201,"unpackedSize":131954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFPGbCRA9TVsSAnZWagAAU/4P/jIfcKx3JMUUOcngU/vW\nHr66kpqEYI8bKqpPT/XKEDgfKNtTGIH0664apZ/PIXUxqDqFuEyME37vp7Q/\n3XUiSo+UmEf0JpaOZESSRphs6HFyrUm9yH4LwJmYPqBonETBpU4zo/fWdPXU\nFUQuMXdh/zYD8bzbVId1RHTC6Ie6jp5qI9oiG6wmgdKXRaGsv6ZW8+XSaV3s\nyciatNGK9xYKxdhBGjkhaDlSxrJ5aFcfg92tWjSap380eO3GeQ4ezCE0EcWN\nrgDVJpY/DD4LYwSa46EEgWgTHHCrJRhzoOCASXRyyANZ15+wa7D6VvbxS31P\nWNFlOXzqtYY296sqdt1mvuMqUytXIcPZsXADvgriGS71wuAvr5xWZUj2kDiw\ndNO+sw77SNuH4ogP32XZsVA99GIvwtX07iLy3RhhJk9pI86EYqFnLCAlt3tk\nUPX+ohXm+J9U2eLh4500FSt3q3kQCuOpZadT4tokmoil/rhDovub1rlH+BZC\n1s2HBBaWKxzkP7uxzZjofYiHcG4HX/E4TdpRlI15POFTSLAbH3nyxQo5dgKY\njwWK+C+oTaiw0ABAIWIm0NmrVCJKPtgPc357VZ+W+Fp/0lhYsn2r2CHwkOVB\nPMRwautlZJVUKV9mXEu7k3Ah6bpBFGsM5ldvD0Zj4cFAot5vPpg1r7uS9HFj\nsa+r\r\n=VFj6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDE9JgPHFeIhLuxpb+P8zYaB+c/tj+vGSC/Srz7mF3cNQIhAN2Hw2VIqBCx6nSzwjk/LBIuEToigqelhMm7j+P6OW8a"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.0.17_1561653658681_0.2124776892434752"},"_hasShrinkwrap":false},"2.1.0":{"name":"ts-toolbelt","version":"2.1.0","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"c0287eb0a8b51383b6fc1b5910a412d4dc7071b0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.1.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1NiWAcJXXaWOQwNQ4DqHmh0xEe8PAT72mefoVZeELLZ4uzUpOGSS3tE0aas+M2KX70H3Ww7Hs6+M9d01my7K9A==","shasum":"14b8776c205a6950d55a15276b5bef11b4168dc2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.1.0.tgz","fileCount":203,"unpackedSize":133996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFTpZCRA9TVsSAnZWagAALKkP/jLDT10xSz/6VUcm789E\nP3GDWdfhcM3AOFhAGbAvc9G4CJz8dyiukQWTEoaCzdDLDWEkAwoUM6vMRAwD\nMgNw/Ipv1qoGUi4f36tE+8dftqh8Sc+eSs70TT6+kr/PZ3oC9zs5blHi145l\n1yeVsbPzt06GodBCstWvdE29B8Rc+GJw0iFttY/k9vScHxVJJSDbuI5UV4R+\nhV9KAk3gjJfqTSlZN9Bqk2sBvi/oOt76S70Ij+ziZ8xyymO3NXwr6BQun6kH\nBohuMECFW2CCtEfXxfQuMUSNSbXBLyfh2Fc6pq2WvBhDvhdhw000y84ZpqWP\ncXPzo1hy6sevrqGslMbvQab22/Pl/mTpwFlEKwRhMHzaPr3XXtEGSNPWbrtN\nJRsmT+zXJbgW3OBNiZRyOMPl/nuZ7b9oxqwRS4kodu696NrbkhOrE+5w74v3\n2+wPGl5lHiZWZtETW5vvoO1clTFgk5/yVU2t5FfIoMAj05GVh2ZXzBnUOatr\nAr1NiUyrOy6s7lWVIUPw9wA3sfHq33daA3Y7PdKGKqmnCSIUazrwtoVCYLZl\nibUZNKQKFbegf4WZhgPJobQvb3XXhbrUBQx1pI28DwLaEY6BkVyXIsXwzRVT\nLfD367//V8d7smBvNUDZn91CT7gMKXkrE/z7j+ZNe0dvuibYsFt4UyWDUaLi\nqS1C\r\n=/oj+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6nvi9MDPHU4pmCBSo1x7PD0uQFnjQ0A03iI+nZqo48AIgFf/92gtDXv4JDQecqGNF5YIttQ5RG2PRkax+IBa5XWA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.1.0_1561672280697_0.7702336915546448"},"_hasShrinkwrap":false},"2.1.1":{"name":"ts-toolbelt","version":"2.1.1","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"5fd32bb68fd27dd6bdddea6994cf3d9e163a7406","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.1.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-W+y37451LYt3vfMVr0pbE+HGz516oa1X98hCWn0pb/TPIgytQ5GySNgnYCP7HXk3RvjtIPiIvSwAclk04h57+g==","shasum":"483850108f380c6c81e77bf290ef59f9e2ca0e84","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.1.1.tgz","fileCount":203,"unpackedSize":133965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFVF7CRA9TVsSAnZWagAA+c0QAIsfobfJdYDD+/xLh4sZ\nWlq5x03vTL2WeqzzG/54a48wi1VhQ1t4E+37kSHQKRHG06uG4p6YmumxERmw\nP6EkQ4Hb9sVwctm7w6kTPSUTCI7aDUDXDu7IuURHZ0hHwcxPoyVdSoK9sGOr\nbFfoYj/WjUSaNLnemsQzazA3ANBNCYSThdhr2hxua9esjGRUu1H/avAErPvN\n8h+AK9bWF3wzYTLEj+ddCWYw/OlOHOzztOdDziLvSdZ8HE+hC+tZDS/AE+xf\nFplf2FY2jP1X5KD6YpVjN7rsfeUV1I04AEP9fALVTZnUOkSIKRHosZO5VKFw\noTe10zk0H6JglTEIo65VdPWLpajdnGRCirI75xUVrsWEmZ2QfjGyt6Dkrqlg\nTSmH+6Q7Gki1QEgg+8czsf4cG2/FDXppcvuEjDUgrBPnxEjbJSD6RQ7c7GMJ\nNawUCvZxsiMLgTE8yyHhXOWzHvQOINkXCEQjsbt2+liTn8CbR9Dp25or7NRm\ng9OrKQrJDBRTE/ZgxRUZ8kRxz9YvbmWln4maiIHhQ/osd/ExRUqnzw8Ktgfn\n9A3BGc8Yp6/DgiH+q73HjnHD+VY8KDrD+xSLkVLMYymxbBm7KNOPVpAc/2a1\nn5ttbNd/nkvLqapnIRUxDlJOZ1CKsznzV8NaQdUU5GCZ3ArkJoUPfGB3Ym+K\nqcdM\r\n=/etJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1knb/bRzhF9dLc9dxA7LDRYsdpa2wBL1N85i/VEbicQIgSVXduwtk/e6ZCv2ArARPqsTnemurLTVipk+ighQPwwE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.1.1_1561678203263_0.3450135771884142"},"_hasShrinkwrap":false},"2.1.2":{"name":"ts-toolbelt","version":"2.1.2","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"5bbfba2b2e55d495229453b45c299244131b0f64","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.1.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-buuPX7VihQAiCGMs7A5maz/nM40WG35Jmj23YiS6T28B9dhjJYPUYauFvi7OwgF+v+UsOufXXZ9myGyq6zGGcA==","shasum":"3dcb4a13239c5d4bf3a037199696eba93e97ab8c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.1.2.tgz","fileCount":203,"unpackedSize":133967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFfjVCRA9TVsSAnZWagAAd5cP/j59HWNjDf9SydtSR3x6\n6apaLFtJ2KvPVQ1SHr4CCa9Yk2+3kcPoHRGuCB6+iSR0ejtp2GCJNE1Fyupv\nIz2yZt3bkldVewae+C94Zzog691RLS9ZWK2O10xIyCImLdj3EpOgVHUuEbsl\nGhwR5XWRzCQUfwA0S7U59IfOCtfknQHAl0MkeSvTPjVvxBmyBQkyqo+4YQo4\npeRTRxxpJl0Pw7ds8tPWh8CaMDuKq6fg5XpKwJRT1GhSd5NyyUe+rjJloU3R\nIxIvVzS9YxzceHNv4yIWYtFKmA3JKhUrj4RHWVre1l7q0klGxQaHEiz2jq6y\nFVUcC4/36FB2fX9ieP7DcYRrjPLWbqVDYT9RFlPl2GiLJktLLkWFrvRZFU/R\nYCqf++t6TR6VAfBoS3DD87oYr+7O43Bl9X8EXupERPHwZKqDGmjtI4su7d4Y\n7As3NFtlozs3UkLsnUxegUckaX/gQcF57ZeYlxjeFqWtisgv4RLgwwcMY2bx\nWR4Z2NWqoO0tbpsmrEpPa4kkE3nRCTvIJ8bmcbPjbP/yHPEpP+23yh8FXfs7\nF8WerZLgUqkS965U2jJMgtK/fLkTGuTIeZAfmKUkc3KL5Vy+ORAbPkkOTktf\n1DYSgrHh0vfd8Hdl9T3T94syTzijqTaJoZGC22VHqydfy93bi70GPY5p/ijn\nTiyP\r\n=TkNd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFP1LHuEaQKePssQaH8ArEy+6d1h0CVJl5GGfCxZUhJKAiB9+G6tlu4DYltFkB8yPqR8az2mqza6rgA7TBlayM8SOg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.1.2_1561721044958_0.8432960534165581"},"_hasShrinkwrap":false},"2.1.3":{"name":"ts-toolbelt","version":"2.1.3","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"ba780ef669f6273c95cfed8240dc7903f1f92907","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.1.3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lYWOELkUqgTdqYI/8GJfMnVSbinMOO7kZReTzB1dU3yDZSukD8YQkZyNrBzPbWncfDm90MQBu97DzKoWqsr3kg==","shasum":"d1a80d2ce60ab4ece2664866f5b6df57ee9bb391","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.1.3.tgz","fileCount":203,"unpackedSize":134171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFlmOCRA9TVsSAnZWagAAbv4P/Amn3iLKVgSmM3jl3vUD\nLa1cLYoFN6njAEUiyGh1MghZ6id1K8YJbmFttb4NJB+5uwvSVvfKTzIeL1l1\n5O5Di93XRI59ReSTDH8buYnccPicQVcuVrBTGns1kl0FMijUMU7+Q00a2CdC\nIlYQG4vGn2gDBF9pCN8mODbFnX9ntLKmx8sSWCBDyXhsBQ9XTF3TGz/ibVap\nWWRVK9thACL7+y6MOgNzmqbX/qitaaTf/zaW254CCvZvT0I4oNQlXY4NLGz+\nn2M04tHkqXhYQ4szr/FOdyYqc3yxGOEOfFkZXRy2umUthJKSJ7GbuDrA3kPp\niZVG6GV0xAvjMvxXtqztyi11niwfwIzQGegbDUdy79BOjPFCfLjH9i8Acu8F\nyj17Fs3K/OD1OzFM1G54h/NdxHN2TCieKWj8MXmQS6tyi2fsqDmtN8Ins6KH\njO1DVuF6I4VNprF3sDrm1Eh3AHu+kGOqPmpFqjpCcdpvjiRKyg3X5Gh7keoo\nwW6GnKnRcAz8BrZh0A0wCV7jRQwSSuNbjDX8Tp5Bfb3yARCXG6rkRt4jc6fo\nGPFhroGIvcYd/Z7Rje6Epjol1Ufsqthi+fXKn8qFuVy/Mx7nwzn+8tDmM6LZ\nzTs+2LDtIBnm4LEp1U+WcSbtg5IGdnPkpKentlVNH2NdZFKkXiCldpLFR9Qg\nA1/s\r\n=T0rY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUmoEo6PekFbo1soyK1JaKVlXZvZFvfeSuR3X4qaPE+wIgFnggLDNY1WTW6Hr6uFlBloqBQ8V56paP1vA5h0tSx3s="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.1.3_1561745805697_0.5457599365894721"},"_hasShrinkwrap":false},"2.1.4":{"name":"ts-toolbelt","version":"2.1.4","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"15cbf3e12bb44984d42a2bb65bf27a0f4f19e95f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.1.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-AEJDuGBbmMWjJxcBqTjBN8giwTew2tU4cHGxkR9C80bv48KasfB3aw7amPv8IUKjA85AROkNP00vi9cGdMz6jw==","shasum":"a920f18e09366f618e8b0ba60650a12cc32dbbc3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.1.4.tgz","fileCount":204,"unpackedSize":135180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdF7QOCRA9TVsSAnZWagAAu44P/2FoTq0b9bEleqQtqELu\nojFitJ/a9BYV34MfCG4JcQjFN4btc5cUHzIkyBg8cSdGVvYqa/qy5JmDE6QV\n8hkwuAQAZB7h+TkW3t5FG/uD3gicGofJeDSP7ONNqirExfhBkYgmA89SP2EB\nB1NbzLc843i0SJaFYxtMv6OAC+/bZcNhs4vK3AU/ymeLEWd1fO3m53t8zuwM\nEvMj7SqOZHCyDPCzk5GMEHHQ4fkDHX+KrE9sOxEhOxdKN5yEsJo55Gb8QiQV\nGsUOX1FfOfJWNhd6esyRN2AtfMz0SQGUgeyQk8GvGrSgCYNsXUxuyA/Uimih\nRrdfKNZyzLG9Ep8T1Mzh4Lof9a9aksNBRQtl0bx4knQ8srg8TLnMVokvoBDJ\nrC/tG64aDF0JJtfp/5weZ5txopzhncg7T/2nYC8Ex492cOzoLii2rhs12Qt8\nDTtF6kWSC+wXKIU1m1omlyGhK+f3ss8Nu84Saeg8UwNOcrgtYe39Tf1dznYd\nE3TrMTv6xCcPb/wW13qdGerIb6VUhP1V9fG3wlr3AY8a2hwZHHjCcfpLcLBp\nCj5WzQ/orZpJvkJxNkzt9/oLjR3dUEp7k5gyqk7PlQJRA1PvaR7b9zDO2Enl\nKMSoruChyNSc7sfPOaYC/yeMmdGj3DV+EfwdLhf5+3gotsi84CSaBJQJ2IpM\nnVbY\r\n=x+Ic\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxCPW39TxDMw5SuUlNopfoM5uTK2Wka9R9WjLTNb1/2AiEA+krr61R62agLEhViQmtz0+O7HfbGKdovqELneQ/k5jQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.1.4_1561834509278_0.30327076906725137"},"_hasShrinkwrap":false},"2.1.5":{"name":"ts-toolbelt","version":"2.1.5","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"60e75e843934f1f0451a80596b9b20a87f515ebc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@2.1.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lkusd8PwfZWvxeRNni7xGfgSlujeO9z1YmOLT1ENMuPinNppk5Yg8ZQzbG5Phb+uqaBMpYSvW4UXDKfrXoL0yA==","shasum":"bfb992c91b8bf98bc286d14f482a1007063abdcf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-2.1.5.tgz","fileCount":204,"unpackedSize":135262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdF78HCRA9TVsSAnZWagAAq94P/jF+KjnRvlUIVuSbmOSk\nEN08K7NwqlmjjVVW6xh0tZ3N5vM3kbu0RtNcqAAXb1phiECvmE8l09pAWuwA\nn+E10rPDLcqJmJ3MPZKY+2BjRn0bmMAB4t0TCQENzf4viqbAESTeCPW8V5nV\nO1b3TVpW8eK2DFHXFZtY1zeUlFT55iCcs5lsF1ZZT4hl3+37NFWz+EBUl4fw\nIMnoXZTTik1GaySG9HKnd2JMPBEiwhNg3W/sIZ8/u93B7I+MlFyHP8FkqLGf\nIp3t2U2hhg0FjzLEelPejAia/s7XsVxKktZI1bnXNlMgWkH7n7+O/sBON3MR\nJJuHckBjRMhWoFwkrs18DrIC0qjdBa7FPVQl1/NHci2uNuHib1Xi/kiZzOzR\n/dvFouuuNND2pcsnSxXUiSj+vyM1SipVFVa0wJmyTt2Ac4VhTusMSTkoVuWM\nhAwPczmKIZtk9tui79GQngEzTyWT+oLeW+8FCQz438de6d2b9w+JEuAzYK24\nAZ7hydMg7Y8x1Qer7l9HD55RNJuFBzVTINCRKvhYuSvLS9xwztc5HRLYOLQS\nHvSas6EOn4yowF7lRedWHZoEzvZKPPZzh428Fv37jQUS06UZvyD9OH/Ss83d\ntqvFuzYyXkH9UQ/63PO1QQ6wXiFBWeSyq0jTfLJTHRfaww3ni+LWy1jMpbkD\nW69u\r\n=fktx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF0A8Qgv/nx8hIqsLatghfjjd1vIqE8u5JE77KzKA+ElAiEA9gpNm5DmVhSGjepSBvqqQEq7Nyw/VGHZ3KJgBfptAW4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_2.1.5_1561837318302_0.33647032064956917"},"_hasShrinkwrap":false},"3.0.0-0":{"name":"ts-toolbelt","version":"3.0.0-0","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    .\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"a0a5217833ef6e8381e86131c53cf1c6e5f9d05c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hVyNBU3Um/oDzzr1q1tlL8gUJzXTE8VfYbLXw3BLUluqHRDskK/qcEMx39ktqj5LUJpIhXAeJtHylzfXz5ntsA==","shasum":"41ca9e84bffc5d8e05eb77e20b5bac3d4f348926","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-0.tgz","fileCount":205,"unpackedSize":127919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGVehCRA9TVsSAnZWagAAb5oP+QCBaIrjJCdZGH9mHPe3\nPlU+qn9Fs2/kWap0Ay2imdEpy8/NxF47cNc7EnmALLjqDU/ulKIj59saEjt2\nR4+N5MKsTck5oRXMr195zZRH9uin3rMSq8xaq7Dg9Q1KbyZX99Y1DJZYQ/KW\nVUZ3Kge1JkSI2Nou+AO1w69ywMplLphSyblDei2UGd7aUE2SX3+QNEyBkydi\nNQUgVdWtOPJN3cilHESPQSpNGi7KRMroghVqvfrjsCXzZgwZQvavajWHC4QG\nP7OWAqk1S9+GSZr3KipYAcgPBi30lcI10c8+kdUaIpXXG4l+5O9eYh1W+bZa\nZBmCLRCNOamXRBCzibrJIcr816H7H9hf5qYGf1C5s7xkagnpC8VMoFLPuUEz\nS6p0R2BVr44ZmkVABCO6FYvphlHDwlQgtpNXHGLkoqUJK9bJ0hPHuecyb+sW\nwEkGc7wIlkmDzDhgr/kVY7863P15+TnJa6wmM/auAj2adtHzXEAp4Xa/Ggzr\nbsiSojcIJUx8C4lyMB5/ez+F2/rLTiX1wEXa63v43fast8OCZfMrefkwLafg\nTy3Sqjkk8hmi1EBcppfM+QOSwLEuiB7SDW6o7tG3HHfTLvDjAezjuBSbcNpD\nu5UHK+4SxgSVadduP2UV9601MJCuIfY+Zl+7hmMnEDA5UGtvGkpFo6FMMv30\n/+D2\r\n=ZEOl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDieUip2XtBoK218lwaqVZDc09gXYjGDae9u5WULqf+MQIgdqu15d86j1RGCJZUPHG3XLxTi6eT+jpC8LhQl+wgwo4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-0_1561941921114_0.28687284433237337"},"_hasShrinkwrap":false},"3.0.0-1":{"name":"ts-toolbelt","version":"3.0.0-1","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    .\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"f88f345cc872cdb97bd1ea82277ea60edda19d85","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-erXfak+GRAZjfvpMHgl0ctTAUhjCvsapALaBjw9hMvNjKaGpw//zLhC5eyte45+8xzf6QDbo1MMhLBpM2aQ2VQ==","shasum":"1c5df57c3937a6ab76d15048afbfc6a6d4aa2b80","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-1.tgz","fileCount":205,"unpackedSize":131786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGV6FCRA9TVsSAnZWagAAlnUP/0tecTW43tc7TZdlOtV1\nkysOgPlGmeyBdGiZGqTBB99AWrcNXKtRoZcGvWyrJLMzv7/SRxqipkiDWZNv\nVCFSHjU2YCmAqnqbHO1Okl5SckaR0mMrfH8th/C8rwnzvmABHML68SaZ685A\nO7uoZN1UhBRI6c1/xwfOeqlld00wJO/KekWd1jx5cnBy2Zp9YiqzYfb3ifVq\nep2o1irdyZa583t4eP8aR0HstH5q+JcAedw4Al/XT7Ck+R3pdYugFQft9Lio\nBIxmTcET7/6dVd2WP9N5h7mrT2AxtjW0cU7TO2G7f9WkDybFgFRct5xXMXQM\nt1KDC9xTQEIg2UsnVcLbyE3F+x0CI6FiJZ2Lz4Y/JnfrHMgPiKTjOldab6jp\nl23rLuj044nbYZ5zd7aR8zUqUPkE+A+f0c3S35rMfxIPYJ26hYKwuGlLepSA\nl9HWFX0eFRWz5VgRiBJSERLbu0VfOhb8CXsPYfvvDbCmADQ4Ptk8CSkmbwDM\n+LClCAwpwlfEpLPGfUCQp/MwzTPOC/u7VkvONM82rVmEhjcvncLDM9/yL6Z7\ndu4lej0ZH66/M666R12bXTUjb+P9vCd7r2UQ3ltIp67bxtkBZdI1gXIgVp92\nt8PEYC66HpJQjtnoJ34ioMSWHWDAIA7neUNcjhDh/YisqnU1a6223Npjw6QB\noPTT\r\n=tWoe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAHdGOpf7NKn/Yh1BhBcNbtffaj/RJOb7NE3AMClB66aAiA//RcOquWmzitZkjpJ0SVRzwIYda8X88BBtojKMrInJg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-1_1561943685037_0.9138495691802728"},"_hasShrinkwrap":false},"3.0.0-2":{"name":"ts-toolbelt","version":"3.0.0-2","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch ./out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    .\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"01c72d37dd8124207f1943e2057659ac56823c68","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kyoxcuSYd8Q7wYOKTWcsYfdkzOB2uWbGr6sQ5w2HMqeKENP06rRuVg/A8dH9U9+M4e9UUadilpKiFTSES/ywiw==","shasum":"630090b664eee3741d9db792dff6cf15c385829c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-2.tgz","fileCount":205,"unpackedSize":131786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGkaOCRA9TVsSAnZWagAAST8P/ju5+hEY+AQJn3HTvWW5\ngS+IwDpyqDVFjOWIHnKdF2gjsINL9OUGAFXk4nfmBAifbEb675GwuHx0dWhx\nDgCx95CuqxqFKwDsiWtiBPt+0Qx72+ax3kZ/pjth4WPcViPU4U0WDIAJPnpt\nDvqTfK3VdJ3FoagIrWqSO0vYs0ZSJ82YxvECtV0l9jZfeW/N88lAuxOmUyPc\n4erIlW4ZQt39aw88KwgDKqvuuW/UQ0ff2SvC1MUaEtKunHwCqteM+jyvFj8U\nsmDquYT55bLH3rFCAGHSltsms5Xfi5OWZSYxi8QmCJoD8XtCczNnGFlvROxJ\nOxqVpMv+KoCdWQoXue6Otc8N2Bk1rnty99lBoiWMERb4g+jdzJOwhr5HpcV4\nN84IxaWzedTZNn05SpRnLA0T28UEFj1o5N0shi2lgikS3zEAh5Oda0CrsTtV\nMRBywH6b2VSX7J20Ghx+Els8SllB7JqZ2CKRo36Q2FAC/KKYyXDBJ5VJ3Uqd\nZw0JiOKx9Qd7l+Edrwc9cellf7rI7HebJ9hRfXiSogFfnNdJY6siZTe9WkX2\nvH5fBKh6kiaDjrLpWC+3BbcQILeHf6dvI1Z/lptqQyY0fLiaxg0JZ0lQZST2\nHs0jDNRl9HtBu0isF5AtyWBIbjDRcy40kUxiV1BBiDp0ByiGSiVOmVGa/otR\nHmBP\r\n=VrFy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCc6cqMH2R6bXYOK6rfniK/7mP5sTYAZ57/7WRIZW6KfAIgOh11OHeTY4LgljzuF6M7uq067eSTIugd/ZYeMmZvGYY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-2_1562003085826_0.20890813547988452"},"_hasShrinkwrap":false},"3.0.0-3":{"name":"ts-toolbelt","version":"3.0.0-3","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs ./src/ --theme ./node_modules/eledoc/bin/default/ && touch ./docs/.nojekyll && git add ./docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    .\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"8e2c80bcb024b848d6b88f0787758ea4c27e513f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-dppHqjW5XUZfgKXrfPC5NpCLsd+FaYZ50n6TKNAp8rSst0jETMbqIzaNk7XjHo7Jtg+n46qH75UjqIJ6FSHmeA==","shasum":"d1fca86c0503d55e1b95827b67c65945770a7b61","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-3.tgz","fileCount":194,"unpackedSize":131508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdG1fTCRA9TVsSAnZWagAAILQP/18oKWCPTHTFLEYhUvOe\nI4WyXD4/Sg38BRL78pmH/L9LtlzBqeaxffnhmgAjUGah2juZYTfrbDCkAdNT\nxoK8bj6oqHwxxKjjgd5KgA9jeHSJ/9wrcl6gmnCIes7MYN3bpxdNOafkjfg5\n/WtdVHD/7rZAmlr3gWYt/gc5z7tHqwCmR74xRUZjyNvhe9wxL3vJWzeE1vp1\nSXmC5B62rTQ6LwvR/sg90iBBgnd8vqd/pC6aSPMv5vI+p5T5zYvc+xB60YQX\nFbgUozswp4hpB3JHkif1AHUadz3Wqe9LscL9QbxkITGwa359DjDDfq4RbtUR\noUbjsvhbmPmQKtU+whSU8FtVtvLgzOuITpyVMsJ2sqJEfD5uRtCCbfjPFhyp\n2wV1N/HSCYTpo4Ey4duyrW0vQ0S3FIVKoumDrRZW7mZ3OkHIgSf1Afos/SY1\nvD+/+eGd4//cn3BWC5IaMWOgldyoHS9PCeqtjGg8nYaTAuGteNuIry6NOO3s\nkA/YVF3/JQjVxyh+t2pQRMctVYlSUHENTf2KVk8Q9075ZCrJPTTSwU6D4ixO\nMr6IerOiZPQfbpl87rM61uKlKyGkEDgKB2Bi6WWt3AUQFzqn9tdi+cSNZCDX\nEw6Rmv8NTQAOZFn5h5s+A5DZkDrxONJxY5qOTd1TGqjSQZDrg/M7TTuV+vvc\n5/id\r\n=WhnB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCI1wikx4piBx6ASO9LkQujS+GPZu4E9XuVt2bdJbFD1QIgZbHIRkq2CIJWgx3j+g77y0jARZYi/HCiXiqbg1/KXjQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-3_1562073042807_0.6195938545499673"},"_hasShrinkwrap":false},"3.0.0-4":{"name":"ts-toolbelt","version":"3.0.0-4","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    .\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"d762f351f33dfdb5c28ca1f74861a0661ef85261","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ShpZBDQONv3RNWG0cEDilXG+7Bz4A1QJIccY+IPi6u3CJXFN2Dc7A4pbTT2r/9VrOfqWvbpoAWAz0WMadryF+g==","shasum":"7c76a277bdaee78bb8632daadcf6bf0a63bac540","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-4.tgz","fileCount":194,"unpackedSize":131499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdG1ovCRA9TVsSAnZWagAAKOIQAJ2rN3ZyYvFKpU5A6Zq+\nLH5y+q/rGg5LWTltAOR6sRwWmdPg+Dp3T0qT5kMDGKF5jyF9YhiMQFymx3VM\nnTRfCwIIst/oThtir43nmwG/XUEcbB+7CbxoLsFezj00MG7kirSQacrC0eYF\nlf2gx1Gvq0sxqU6F9phxt0dUxep/ZsvTlJF+yDbKC0yt5zrlctvlgwwttP+4\npYhTdQMp+IdgtHAPAS00kP3ZZq9l+I5HJi4ICFb6vhUTVhJQ74IQUg/FwY80\nIVyaeYGO+2wOipCfwuuNQL6WXaoLQbPTvNgiEs7XJsOrKPXys2Gd3oF1uQgc\n6l+hnSOr55js6D8LH9U7RwsB3MKxD0yGUWOagp2Z86HDArOXuFeEXWIlopVR\nC4+WhdPD/lyUK1NK8k7oTVLe3d04mOrWa8G4xPDSLVkvq2/nZk4I+Sgrmrv4\n0yYZAjjAKxutK6qtEVgLKb15lwZxp6xCcChdetw9W9PnB/no5QGvckythq1Q\nfZjP+Dg6ULhCRe/DpTgngH3nO1iXNQyy9r3UgtCF/FVVpXHvCtMgY4eQZlj8\nSmds8Z8iJa6PhMjxkQVeEQmv/KQsl8LATIHs+xf86Dm7e9BNToezm/KD/GOP\nh7CUyIz8s+3dKqDF5jl6lYLECNRlYtjEdhTcXxeC2n+7vCdePKWe7CaDLUXL\nIkVb\r\n=lLXJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjbT3IhdzQOWl2LFhhOna3wAixpLOZdb4rEi+ipLX5AwIhAIOvmjRcYZoUxUq1V7EuzZ/wZ7eCJDJdU0HGPSRaR2oR"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-4_1562073646425_0.5485968492676363"},"_hasShrinkwrap":false},"3.0.0-5":{"name":"ts-toolbelt","version":"3.0.0-5","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"fe6feedce0ddee07e32a398d3ff21571b8eec34e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZOkdF0S6W5WuM1fa+PMrJIpPXQWmitLdCNPRhjWVQssYKUddRi60bcEIROh3y3UQn6UbcKJWFLa4/1NLYRy0Bg==","shasum":"3a101b2c3e61bc33f080cfbd0896bde0debd1cba","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-5.tgz","fileCount":190,"unpackedSize":132740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdIneJCRA9TVsSAnZWagAApLEP/REYUaNdBQXFNreFk1xf\nMPzHsKj+CdfKscvMxHguNjihdx29o8eC/X9WU75llQC5WGytzys3qaA7nwf4\nUroHV+EMrNQVFZ6T+0svTm62qHgZEIYp3bAycRy5V1so4QtShKIstEZofMO3\nfNcYAoLlsEdK2mM0c4P7k9Rz1RMnFTE48UgvorgNulNIn00d0wEkPU44rfYF\nyck3Esko9vsDyFsJnN5jjdzAvLfHeAjqHMbj+umg0MEtcl9n5taG6Np89jQW\nYRHMUGUvkT1J8TR2eWnQd2fJF26L865EC1QO8sYmYyJRsptMtZTpLuctFW+I\nDDZ5ZUa41z0kz6JrBv+W4ULQ+f9LTTS65ahAQZVQ1fDZilKaqO8J9BThez4r\nscOcjHchcBNt/zYSSn7mCI/8euoBDvIMPRJVaIV4KxhtoCJuTSVzAedOSjtH\nDa0Pbgot4znzqKt4fMIt1P8JhhHrpRnop3GBEVLnVr8HOzx/j/q36RrP8ReB\nBcPex7Igea0oq7ebDGHksoe91Jp9xgxv/gw5sXzLJ4Z3T4zK8GW/Y8cjh3s/\n8iHpI3JLW/Lw8XaI0Q7U5pI6YmzHYpuCvK/8YCt18Xmr3QqJco6g7H/2dp6L\nVdAB+CSZnKarR0n7iocFTRH2Z86LWAb5G73hm8LtCIRKtXlBqCaW0gHv3pfL\nzbpa\r\n=UM39\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrpedqK0i963lzGdsRV0+CZ5QmWPyOneFT5iUfdN7I7AIgWHEW/jop4bjoF3AvYTwxuNKh6KrSvOn+0X5irND21V4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-5_1562539912438_0.6331226529235607"},"_hasShrinkwrap":false},"3.0.0-6":{"name":"ts-toolbelt","version":"3.0.0-6","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"191f3fe08c2349856eceff260ee9543d0cf32b57","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YWy+9QfO+Y7OEUyMxsgacF+Zl7gNwWBaol7mssMxHJbCo8l2iG4Dx8AEQL/adAVf3rjhRuNBeQ7go6i+Wy8Vzw==","shasum":"6502d3ec244a2ed45cae9997a1f418def8d89ab2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-6.tgz","fileCount":190,"unpackedSize":132777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdInwWCRA9TVsSAnZWagAAhM8P+gNQ7BdrvEndpn/i/hq8\nVQiepkZmGMw0e2y20XH/kx+2e2EsCp2PDOzPn+jk41y8u/C7xZ4q+MDifpi3\nGs0AxHQdyJbrViTp4Em43WYsNXticeo3CldBR2+q8FMEIR9TlSra0qusStVh\ngLsnP1+vmYP7ZmKH75J199cwBGRO6MysCss3f+pia9ag6l9/T2zAG8dq0Eq2\nchRrvQ1bsf+II2YdhSKBxCNAtOKkIIFgE3d4qXYCC7MOiRnBjAjgFfLjQyBH\ndNhNplPpaBfHymAU+QFzZ/RQ4upxfZkimQaYfRwS7VG4m10WKw6+mvU7PPgA\n+tHdNx3cxYvHe8zDFYUfPcyVMt9BVUkKrPr33yoVT+x1XtDRZFbqByxsioR8\nQbLikXGhOiwM+NUltlOjEthZyruq5hGhySa302vBnI+GUqhhsJkh0lbn0hc5\nlokQdqHsFn+5HlXRgpA8Dkein03QHqTZhZOY4BSyyVWNKf7mPEwua32t+hw2\nDt6mgjvtlp8WeXGZYRzDLL7/2W6oJmoiUAJl4J68Hs6jUTU8kw1+FhZmScP1\nhx1A7yafijcPP0uPFkC3ZeDNzZzZbH9Q6dFiTTd86H26X0+/NJAeF0b4YT49\nh1PGtxeDPPluFf0CHpZFJ1oyT8XAKNTirjb1GhSzRzourE9WM942KFvaLr9B\nN6FL\r\n=80no\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFa+JKOcoXhR80/Pa1NG1OjBSWsoDZHy8ZMHzCHtsQ2vAiEAhAB7/9atT9o5ZWx/S0DQeGjGzW64zayHH/3Enq3MbIM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-6_1562541077759_0.152698818195232"},"_hasShrinkwrap":false},"3.0.0-7":{"name":"ts-toolbelt","version":"3.0.0-7","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"66ede6ec06eb0e0b57925919fd1a425bd457fe4c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-7","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kUee8ftMHk+vSLjEx2R1nqXCGmVuhUexfbTiruSe/v/rLbApNpf5YzKtUNPTh9PG2uBOKBogZKRiG8irTepEew==","shasum":"4590b8a0e13edd0bd9ac9885f0200a04459e7235","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-7.tgz","fileCount":190,"unpackedSize":133068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdI7LoCRA9TVsSAnZWagAAlhcP/260m19+OzO2B49gglEA\nGI6cydFoFqLOzCwsHnJgDkP2rxdBpYiKP0iYsqVk+UAGO3eTllVwWNNS/kC5\nSp3E6EOVAd7YPa5LHgQiZOdOZfRI183DVQWZc6koVEz7HRxjaFDfYIZYe3D5\nSaw9dXiGVTCpWdvwVFQWrW6+/xLV2b4UPOOGTzx2X4IQYj6tLOf0M5uUh1wK\nbk2pGrWZ6qj+m9k4TVmJ8+C9q+FE1dM+DGEK/FMF2JSmlAClqKRf0NT8ao29\ngzV8kKTS/fRS6u/baDtk2wgo7zJxFDZqMKkJIYFzfGspHTlHVVj86FbUsJME\nTgWACiXl0neoULlV9oOY8KHoodkm7G9smvBhb7x8LzE8zQMpjr34pYA/PCrz\np5hqTXLVb3tYUfcEHmxhL9iVW6MyIHcXFuN+zqSjuv4FkgTm64IUt1fwKR0m\nXWzr3REZfTzMw9GYoCuFYM/Jn0ieg9mayNeVMHA8UfA+EA+z59p4cAO8cwf1\n/7w5TnicXJVKQ8oGmpG/NJQbHlrf0Wm+BiNbFU1tCZkkoS0/7InYEC0uqC0I\nt91tUsiTlSKTcuJj7feXYSO4dvLjTiWhg5kpYlhUujCoaRjm6eGGJfXyicpO\nv/u2U4B7twGLZhTdZ8RimjoHVKBtj0TGP5g2u6a6DObyUeh6RxiITIR+Mm6L\n3bS1\r\n=T4jY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEco65E0GPItzWpT4RCZbyKPodj5OKpyc419KHCwJ5l3AiEA64Ns4Dn8chm+95XkikFbKjiutAWxESplqPLrqdc0PtI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-7_1562620647491_0.12973017463640768"},"_hasShrinkwrap":false},"3.0.0-8":{"name":"ts-toolbelt","version":"3.0.0-8","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"87b6f4c9ec970ac9fcf6573bfd2768013da23176","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-8","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sSb5xfKsLzLEERbFKM3V/8reiUMilPbnGR8z2w+8+JUtZbfw2z6vzw38zpAVPVpnzjqhL3NP4SvmtKjoFzNL8A==","shasum":"a33e46b20674bf9290cee7a1a1f7b978337a1bf7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-8.tgz","fileCount":190,"unpackedSize":133068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdI7wUCRA9TVsSAnZWagAA9OIP+QD/ECetDpt+NXfVttlr\nPFIRXQ1V54lL6dSTTkdKnUWIetENiAv33ftNTRIldj88gjpOvyCWIc+RTTZv\nmfjZg/sJ46T1kM+fsjfW+BogfNWsxZXdyKYVvhqy9Nh3ybbfYdbgI4jImUdZ\n4vllEcJ7VghTaJki3veBxsS8vJQQkmN8qqX+2JfZQuKfb34Gqw9r4nGPYLEV\niM+x/18uJZrl0S/NwR2xB97gwpNpA6jPpsaCxQ7/Tj/fuJuMFqs8QvpzYezE\nU/7YUeNPDd/0l238nk41QMjo9Tn8gCw6lBajPobj1z6RACN6UHje7hgOYPBG\nAy6yZ2pQD/eVbaD7A+hbE9JOjIdsISy368rsJjErWrspUxEuihsrNc94gGNw\n4SU0JbFewIeXtZvaRuyuNuP/EZ0pb6cwItZgmiJQ7m6/jtglo0aktTlWI6jf\nm94ZBNygbhUVsF9KlGSyWrtUyZH135P7n02+y/ZxJl00wmcbnegBFQhs9jDM\nQ5owa6lNETpevAr9UEf/XfAFiQhlYOmJAgz84uZYoW4hO4Zus5g7OP2eyZWr\nbu5nganI7YW2xIaCisQZNGtrvIzA1+tScb9szY4QmPUuE5g9ByE8qC0Nh7Zl\nktjszqlnnnxEzYVX+hCDbOnURwc9PJ/DliQSFbP+JVciV8rPwKgJGy/VTj2l\nxrHF\r\n=EOxp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrfgtCRBrotQfbvKa8IpZgJ909pS8Up2IDzXQc/H7MagIgUAyzuHWt/ZQhP+ixMY4sevlj+QSruY6VmEd8rNWnyVw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-8_1562622995564_0.1672204062919398"},"_hasShrinkwrap":false},"3.0.0-9":{"name":"ts-toolbelt","version":"3.0.0-9","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"9120b7d4a76c8b6835629a868614ad90b72f9bcb","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-9","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nFEZWDn4TtgSP1J4dufzaNgXtkuVN5tFZiFPy6fD+At3rHsyjYcdbaM+x12n6GR0Pil1JgO6xIpWF4g8CkSlJw==","shasum":"02d48d202d7eff6e08e0beab23b57aa2fb64c609","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-9.tgz","fileCount":190,"unpackedSize":132921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdI8waCRA9TVsSAnZWagAA5vUP/iHX5+r0dOOJ+mYeXhHI\nx8sAnENNbK4tTrvjhBuwZg6nGuWx7Hc6w+OwEx1xc8RIeeoJCFDd5WMRjsuw\nuHh6WuIBeI92pWwyD3ZtomXAVVNLxNmcgOxc6PmjgkOz15DqQo5s9kAPoYNQ\nU6bEvY3fg7vrh9F9dB4RsGON2NnDs4/Fh8ec0nY2adwXXhAdEMwdE0237Q99\nmdz389fjm57NaTtDQeqi8xD1dgx8ZN1cMWcrCTISRRPcDttPpP/KRubRSE7X\nDdB2NuHaKvFjXoS0be54VIO0XzANZ/8Ny/oZU3kiXZACypmd59Erzn6LB29a\nT+V7oHv81gVM3kr0dqwS6r7AwzMMkANchbJwHt61HZA4ZC5DroxIzfMgbenJ\nJktauMGF4w7PtZVbAV5y2C1Sx/SWJzVXdK54kp//R8jRQA7/Tr55e2Mrqs1g\nY20bXgPWc80w7Q4TSMpywTfUMBG8xCbdf00vyhtXwF4JBkubfhmNMYhL5xZq\nquDzLI0jBTkgdX9qhJ0Nvwt4d1lc1xcWwJhNBhvz3soPEMmYjcvPi7UZhoCU\nvmxDj/Qwk3DwkCa6uXtXIfIqzNNUcOFNd/zK66QdAHi0NMZ2BEVCO3pgwaqv\nq7M5lSafcWR/1gZOXvEkg2CLqjzAE0P5ys+BOcyxj4kaakqRmKQNpuDiKzNK\nkE6c\r\n=HJlR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe6OKRT8kEtHnFcGSFzQyB7TYoZaXEUpqjH0Qhr8xeDgIhAJLmAYvLFy9Iacdnrq4w3KxkUX06dOzdibUCsA01gxBv"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-9_1562627097886_0.7920012618495622"},"_hasShrinkwrap":false},"3.0.0-10":{"name":"ts-toolbelt","version":"3.0.0-10","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"776966cad19f03d998767fee0ab3879c84dae84a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-10","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-XBZUphDB2bZLZe2jKieAazBCp6e1pei0laryyOxF0WrfpuYzslmGL/YfvZqfTr4uHtNq60l9NzYwzu2F4Gh7ug==","shasum":"de09865dedbf734127d49f5647e9a566877e4fb5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-10.tgz","fileCount":190,"unpackedSize":133110,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLhahCRA9TVsSAnZWagAAa/YQAItcPL4FaFzjzU81v4HO\nuhVuKRpiJTxxcFsOxwDYkWyTIv9l4AJq4EGYfZbNn3InIOPT9Of8xSgih0S8\nmi9OHJrK5i1SQTC6dVsLNPsWZhn6CjbRT1t5VgugBMSk4H1BBpyxcU06gVXO\nelJ5xDiWzJrAmC7jjnlYCriAyT2als4Fkmx0Q6YJ2FN/yjbHFAZUO/5W//Um\nbNqY6vO1SNNXsECxAIikWMjLCPF+emQLkx2NVc0dd8mIUg3hXEIK+W65bRlh\nbJ/1UFSauJA30XZ7Xu+MRO/J89GgvtyZ7KQ0pdg1cynjZDGc5vY3JmYgy5tA\n1cFkX1BTgaBY5TtooPYWWWPapwvKVb01ZdxoxbGk6asDv7HqXZoJevD372H6\nmRxULTgB8i6PV3mbvxomjsdoUoz4lUXqGLsM+qEdj+6eT83Sc6UoyGuhXxbq\n8kVsZfiWM7iQc6npfFL9Vb99b1xSmdcO3AhSN+j35pBRPEMfCKacvhBGyg75\nd/u0h+gV7TKb8kHILNgo1KIql+zIE6wxqd2etQns+Xiv0RrjPaLKuJl/89JN\n/HLXxOtjvmFLYur7q5YZu9OcWnq6SOzC5tAgL5VrTqSmhhpByRov8UrHRSsh\noNaCB+piF35Wcvdt/RlE/zqtpccFObBhZkfH3QBGW+F6wSTv1bUy69vstN2g\nu+eq\r\n=gUXs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEFH0sFt1M9626E+BARkfUm/yyrxyzwxt/fToAv8pt8hAiEA6UQZNsZzOf0LTYKkTiRjk6XFRP+ugR0r5cCeYdn8iH4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-10_1563301536400_0.17350955573527083"},"_hasShrinkwrap":false},"3.0.0-11":{"name":"ts-toolbelt","version":"3.0.0-11","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"2780792d7d3c5f3d9ca12002a9b1a748a5e4ed9a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-11","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-CkVSt1glmMMEeHbOXWHRUIv47clY3/xezHR7dB/U9IXRbm1uPcpptwNnHE0MSsMRLUpZhL9i/RGEM612RoGxqg==","shasum":"d080df07ab725a85f5ec21ac24ec14af502b6473","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-11.tgz","fileCount":190,"unpackedSize":133974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLidkCRA9TVsSAnZWagAAbtwP/1PEBJbH76GsvFzKKT6+\ne8ik9ll0C1NsSTtSverxTM+liKUsSOI/BwrqZeqBaVjg6IxWZBneDXkBPSiO\ndqed0VxwRCDvz4QLkZaBb0m1BjNWPN5ezyFiL4jGnIbxCk1P7AiqMKXifIOd\n9hSoB80JGCunaPbng9f/erVAmWvYj9bikBxwdaKFIIdANgNaIbeqsANfYNb+\nr7e8ojce9Ra5uS59GPK+jNmTOwYuY5GbY//8w7u+hvTS3T2yUQpxoFRvRMlh\nLhMo8aszGjxa8uUTnif3s4a1z5KsAYOXTGQhJ5wwt1KqF0d6Bu6Rj7/6FC1J\nUV0NkSby5tKGgflKMzEZu79NRDPM7smGH3suzaWZCTCEFn1v9iXoj3DlPSjo\nEc6vIUthXFUbufydZHqSRxAQenAYmjkUuG35y0xqORabHdpFEylcX+7z0xY0\nSr3NdFI+5xZi/COfJKTPvGuOUFURGFLuj0T9fPE9ctLKasdiejr2Klg7Yis9\nKka73KHGVEwtfFQRB+fzGwP003I48pulfFBw5hn5+WWKQ1g7uxQtPv9eBu9C\nsmXAD+x90dvox2geRu992fJAkGAVWzFTCnJPRnWLB9nn7LRjiGHr08u40vMs\nzjy2VVT1bXQVWGMGgb02r7P4paEa2VHF5sfQfFyvhreOVxkcxx1+XGaJBheo\nti3Q\r\n=iBzb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLRFiw8Jk+4YceMnR1vbwcDDrpxm6uuIozjJQ5FAbwKwIhAOmxL8yZR4LnbBZW3x/WugkmzB0zApaWtMofM9R8E0Mt"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-11_1563305827498_0.1946519129447435"},"_hasShrinkwrap":false},"3.0.0-12":{"name":"ts-toolbelt","version":"3.0.0-12","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a collection of types that makes TypeScript even **safer**.\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. \n\nIt uses the type system itself for TypeScript to compute more complex types. In\nother words, its API exposes types that trade **CPU & RAM** for higher type\nsafety.\n\n**ts-toolbelt** completes TypeScript with a collection of more than **150**\ntested types.\n\n#### Goals\n* This package aims to be the home of all **utility types**\n* Keep reasonable **performance**, so it will not bloat TS\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nThis is important, the lowest TypeScript version that is [supported](#-compatibility) is 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/wiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n2. Fork the project\n3. Clone your fork\n4. Create a pr/**feature** branch\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n   ```sh\n   git commit -m 'Added this CoolFeature'\n   ```\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n\n## 💟 Friendly Projects\n- [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"027baf34b0493d16165613760e363c4ff9d829f5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0-12","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-RXWw/kA+ajTbdlMAGNVPCxUti4e2sLLeIiB6iQgrgonL9wChuWQAcBg9ZbKd+AyR7UrQ53yQHcqLaAMb6mRimg==","shasum":"b25437f11f2df412e45a392cc490daa8acd2cdb8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0-12.tgz","fileCount":190,"unpackedSize":134077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNy+eCRA9TVsSAnZWagAAWhMP+gPqv4c4eSyA0SnD8baG\nqtUjW0Byroj45JnEAOTLYIRmtuJ4POuVld4IyeOIeDITfJF+2q3BzXy2eoYC\nBIuOjjVK2xczPZoSLTkbdnU5BgfByH2qNuBeZ8Pat5CElca9mteJkZ9Ge6wn\nh7CppkFhgvZxNud/bopedx5oup1g0C71KKIoeUip5U30kpuDimb7CjXdnlPP\nNX8CKU183dzgXpTWkrgdNOo++IZtv5umOY5mFDAYIiF/CwbfO3HZgt+Alz5M\nXSmQ+j37rHU70+LExlUOGbt7fCHbV2p9e63Vvf2v9YrX1DWww1gl9/eyscHc\nBl1g7E/bBaGGGuKr6a36wX7yuM+ww22YcxZTfoMKB9d/g8DXa7zsDvlTbq83\nPbHIrlNgRTSXfqbuNg3hGBGMqZGE5KzCG7Rvg2/KqOfD8idQlFsMBfX6gUIv\nzuxUMeiMc7N2IeK2Z0OOyftd5cuWMMhS5HrsEgxDwEdozZh7hSX3nU2lE8bp\n//5EPjuTyhOfunTXJ2ak9QGtTLI0US/gfatoThENLf48Iqs0OZeq++TVmjeL\nt8saMIaXzu3IcOy9ClmNkt2sV9rm/KjUIjNGC7XHJ14T+mqDUuH3jOb27cPG\nk2I4Q4WtZxi2Dk/2QMf3UBe8iZ0nB23KJ19jUDN0L/dlZd4QRsDNFtcyRJS2\n20DJ\r\n=4snf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZxRTDA+TqmItZ2vTkV0dMnZMH12eUISPYVHrkC4RljAiA05FmlYAagfj/qmwjYghRcmiAi+wXwegGsMiJRlGUEuA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0-12_1563897755739_0.09215213807749967"},"_hasShrinkwrap":false},"3.0.0":{"name":"ts-toolbelt","version":"3.0.0","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"f0a54498fbca87941bd214a11633f74c6b580a07","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.0","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-UzpgQo1OztZMfygJufK+PkWL4QyERyJUkeDNFyH0TG68lNghNkWhKq1rtT7NzXcKVMY7Qngvz9kqretFWUwrfA==","shasum":"0615c93d11d5f58ce91a58c08d52c04ee57f6387","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.0.tgz","fileCount":191,"unpackedSize":135630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOPiVCRA9TVsSAnZWagAAEwUP/1dnxskGs6N3bsaIcEz6\nBeRvCns7o0mIcY+Q+wY2jBUtq4kbOHM3JCm62RpPhUF1rpYQB6zClovFUk0a\n4fRXRLDeKdBswfM9K69NOM4rwtVAc8MzFltXi7VgDkDWsVSav+zqUcLLp5GM\nry6d25minUzojRfZ4qFeZLnkM+Y4fxAtX2fkvRNQPk7R//K4vQzksjqd2Qr8\nBVclEKJEwZBzaJoxANlDe+8wI0QJxQMxuitLrOKbwWASx5a5A++lxKprQInA\nB44v2lx3BG/5xDiBvL+dTXmdl+NuhDJ/IT1SlOXUZnBzgfBf6FORboI1anmC\nH+uqPRu33C52JfocLtaJSJ8F+ojcubi7Q8yQRXlPJM5rtaS4y/yImqLEq3Wi\nAUA+H939us126FDs3rL8l8D12Xzew8Rdy4NmbCRENpfjgeKg0Ofuf76iX4mi\nJECaCv2cHu5LgoUQ6Sjc0TYXwWN4Q8sxYrLYUNFDBo6NgmRu5Yo9FotAC+qH\nuzYQURlp+rc5d/F8PdAK1LzwIsHdh8bb4hyhsFrq2qNGVNKis33uWq+LXNTG\nN1XX0rFjYJxceryk16B0u5AkB8OCkEX0k2QtAdxZ8QM8KyJlFs60tgPOQpP1\nN9sCLKuakAwPGyYifiHJ0+Q9/VpYMdNZEW9u9TCK7XRWLRA7tOT6IFG1y44V\nmFKa\r\n=yXa7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0v0NTHyVjcpotNnoPqduGa9y44ph4Jh80/0LQDNL7xgIgeP38bAmO8dmBEt7v/YtxGRLDQZCPUEKVZMoJhuzNyEc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.0_1564014740369_0.9372481738156551"},"_hasShrinkwrap":false},"3.0.2":{"name":"ts-toolbelt","version":"3.0.2","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"f54894ba28ccca8f0b73a021b353cadeb19faf61","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.2","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-2JfTOA1cgBY00s9Acy9VKTiPSd7tZw0zDsyEdMGAUScOVcD634MiyKkMBlSZ3cZIZeKON5JRkn9mO2wu1sIc7g==","shasum":"5ca6b9595d0fc8dc6a4cbe5974d811734b24484b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.2.tgz","fileCount":191,"unpackedSize":135700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOPoOCRA9TVsSAnZWagAA5LgP/0SfpDzXpcr3y2Q3YJuj\n7zivbQo4BC1kV78mtR0/H+JaBcJl+yO3I8V0W7mAIoI9YhrfbzEkbcpVJL/E\n7GS9hlhpQXr+9ie4AHAYlprNrcBKBAZIL8xxX5Mzv7q70e/0Twzf331gwNrC\nU7qr6waek4UgVCHRVGcMtzn6yMSEQiQGRv2hPtc69XJfa0vjr4aJLrGWUhYv\n8dNl5AnXl8WVTxvjWu+tQF1QutCEp6rXCtbqfSGzBbb4IaCrVgtq7Dw+O0wO\nZ8ROOUoCq6HdYf62l/tuG1WNXY3ejlAD3S0ZwkTxjvop0OeXBZpQdoO7ouEa\nKe+zfZCF/PgjuksCafjRUBgqZZOKYivUJZedSkgcPYJwE2dZTc9FijxscGdZ\nLFsCuNLS1wwec+tJ1gUz13NO9G+54127B9tT7Q3tFx4kybL4FZUezOxqS1wv\nMBTgBzAIWxX/0ln/684EU0OMwjx0IzUPtRrRNON4+2qxLAM3ZaJK9oYBPTMQ\nPR90rWJkFY/HvnY+PEj76g7fEaBbHN8ResBcS27Wi4qmG13gomldgsTLYBaU\nAD1KZxm0nmd0I+WPseFOBv8V3qutWfaBwNZEPBGjeNYMUmagKAcNLWUw/djb\nMMF4wYXeNwuQDA6M7SspiAA0gh2kkDXrl7wD7LrGaAfMGng9N4S75mHOu0w1\n9SBD\r\n=0jNF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAYTz0s5IzjUjVtKHrsURqTqwz3p8u0mrMmw0qrUqn9yAiEAqyK24SpWzdLhBQZZ6YZiRroVeiCe/BF3vIANXCjd1Mc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.2_1564015117673_0.3718092600508789"},"_hasShrinkwrap":false},"3.0.4":{"name":"ts-toolbelt","version":"3.0.4","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"899ea09b2237ce40582ab7f1307831160c17a9b7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.4","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-1TPW/k5uaWLQ/NiZOC1ikiz7ns7PuR9Hy2sqamkFlZAOpNAuImZuAnHo30/C4bLcpQ7jmi3v2Ti7mZ7bo0aRlg==","shasum":"e428931de7b393769b04fc2860818a4ad3f3d39a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.4.tgz","fileCount":191,"unpackedSize":135929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOYcjCRA9TVsSAnZWagAA1EYP/ibz816Yuy+5FskmGzMe\nSc21o4kHumaU+Ttd2TBLWA2R0mrb+i8GDGGJNLtbeYlaMcj2GOSVcyBQPgIj\n4s1Uz69yezVTW2I8acwXJ7Y3yMr3taFz9vBgQn+VP5FSB4MS3TZIBJqwbPLE\nLKFclRG5v/+ny5zgVolz9nR00GsLl7GGMEmRYa1SnpbNtDR3G0aR1S5yOjTY\nEmpNoPz6CBjoNTrv2cTFjOrWEIDREAQ/0keg3xnXXX0GhlN+RDELBEFYptkq\npyWX4M6q82HmYAh45zEE+xqlPd3Z05+moNxVpfOHfqvjnqrA1e/ZMPV6j0L+\nGQDjx4GN/iw6K6jCIy5ixFkjQV/IsFNRYyWBbVsdwqdR4wXGFFTaxZjGg05r\nLCMJmetrAd1cpZnY58iayt36Vzkm+h1Bu82ArzBcCWx2eKFQHdT/ZZePzfoU\nG5SowacE4VCltvgAjOYXGuhRJfendhjnb2HSjH4koIoQolfdSCws43SpPWLt\nWgguep10UwWx5eXUx/tYBSVW+KTMNBFmSoOIGXitbAJyD0OCxGYBAjvo9RjA\n/Z8LailhPZ4P4DogLj1yhwsjLH3x0R876IFbFsZI5k20BQomrJ/pRsa5ZE5+\ncFbMmcQBNInfsKKgfOhaX2VNwfLwrhBnSMgwc3nv4HsBbEwm4XElPFP46HXs\nUW6F\r\n=Ud8H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVFW3YE79kKiPmFFxDrSS17Tv9O6JnKu3KTlJ7pzDHiAiEAjOZZSr+VUrFjhG1hXqsQy41fDf1w+Dkds5AKNZvCdbo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.4_1564051234372_0.5457629161305626"},"_hasShrinkwrap":false},"3.0.5":{"name":"ts-toolbelt","version":"3.0.5","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/src/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"4e72774ea8e1b1ecce64aaedfaa3f1db0727eb1c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.0.5","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-Mmjxdg9hfCjJYFPttARnTzUvU9JCBGGuCOAcV8tuc3fB5BUu8xlkOBpzFEg2l0ryzc/54tfKf3822+gcD5limg==","shasum":"e4fd861398eb1ccb6178e6c1f62ec72d13f9eb50","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.0.5.tgz","fileCount":191,"unpackedSize":135690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOYheCRA9TVsSAnZWagAARMwP/17AOLWJ2vK24ZEf3JbR\nydOgQagKE8an6mlenaw0KkivVTl+xt1XX3TvjM3tlewduepugN9CgIuvImvg\nzv2+ieBboHAfDXXt4tevcu0zODqavLWguD0vkyhslYeA4LT/wzYydcyvAvBb\nR4Qnns9c5mJM6s8b7C21C27bwH2V5Gyv9OS7uqusY3BdN96EKr+6LO5eSBwo\njR5DMzpZlp3ZY1Nvfiuk6bT3iN/J40SlRG8TMvTAqKG/HErcskgeLB4SdpqU\nN5Ay/sVti8QD9dgO3u2CUsbOKPmodi7D97TU7wW1GQHPMW1TqHSG8ZQRrJJe\n+3VFHBE/DlQr+mZaKLm1oqz8E1lJhfswPLF7KTLLKLlA1NbCrR+nvVwUrwcN\nNfJtCmIUaPAN6SawvQXihHl3l27+KwXWufRNIRZeOugLLg6AuoOkbF96X54G\n/tqL1L4S8sb5cjpUqJ5qjkz2LVwaFcbwrY37sTAptI7KXQYTgYqQfgAcWioz\n2EXS7xagf5uCI7qHhiCH3A/h3d1d+IIx48SqNpULfPy8EVW0Q/eaOG2lmmK8\nANszgMLvrQs3v43yNXt32VPcdzfQnRoVbJgkSRaRuEFzAd36D1mA8fkGGRNq\nlMwG8eQN0wnrk5CzQd95IUPkD9MA6qmHEveneExWqc3cE5/B8+ndvJJAqVad\ns4is\r\n=MSBE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH31B8u1S0PNqNz8wJJNv3BQIfH8rh0/FI4fevi4BM/tAiBafEli4aLazkbvZMqkD3gk1XSf8fkM5+r2dqWZGfnwzg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.0.5_1564051549353_0.8674376594911766"},"_hasShrinkwrap":false},"3.1.0":{"name":"ts-toolbelt","version":"3.1.0","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"325894cd1eeae8e67ca40b7ce09e3aeae56fe1b6","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.1.0","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-eiSbX5V60ZjeD2v5onN6yviQp8ulFhfWO6cyPqPLc1YU198BjrNk8d5ygs58N/np0FMz+d8/Vh3umTsbhJvM4A==","shasum":"f905237b1e6c2e9c069038333448baf496c4f524","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.1.0.tgz","fileCount":193,"unpackedSize":136449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOZ7aCRA9TVsSAnZWagAADIUP/3z0pW54Lg3sl3HlX5Oo\nxUdLTlL8jU5VB6cYO/IwTOlxQ3O/GsCSPIVo6fla9uBh2Mj2n76R5hSBSdXf\ntgiYeJvkBWjXG4qJ5uSEhWBnIUxpgNr8jG47e7Ami45yWGF8/YcWA0OyPrIw\n53pTWFAmS3Ivz99vQTLyIZXe4g44FBZqiNx+PtFtgh9UvyVvwR1qhNXs+Aos\nkiWmY+wge2SzjYVHItHvB9nS8JlKFAmJJq8wljkp9qGsmEv54E2x6BJUEJqJ\npo1VUY+RKr5i396zBpoBNCKlQmEsu8mjij5uRLQG2EbtueGDFlF2RUEZWZha\nvNYnMIkkAtDR9qtJWzyTfF0GeT85co6nMN8udjtjNx2eIboNO+I5y1vLje1U\nNzuaQu9y+GczlLZBEMtL/6n4QyA7XAk61LJOg5c7BQGWSqdvABkn2Am4o9Gk\nwLZeRkx6xr/fk2xE/lSW2+nD6BU1HuRPP0I4kNZQ4V2L90BwI4BCb3U2W/AE\ndZ3vBoLmeAYD1dsWItx8mD5gNtPZr+arWPlMJJpjNGBSP6GeBCgR3Xym6X1U\ntdngG8eMNmbvIEHgcaB2D8VtR0HyLyyVaN53z1S1v0c2OPu+hJifpc3bfJ0+\n8HdxxmRbPxIBY/GtB8FiTXzRX69IMbuQmHeo8payyVaPStp4ceR4Uqw65676\n6toV\r\n=GZw2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2ZVFbqxOeCyx0YUH7RnUniwHTVr8VgxeTuOWtiuI11gIhAJQn40FW8Xsok4rwUz4DDDSxNn1DAfHUehPfqiSTrCcB"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.1.0_1564057305345_0.05422633346263761"},"_hasShrinkwrap":false},"3.1.1":{"name":"ts-toolbelt","version":"3.1.1","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.10.2","eledoc":"^0.0.6","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.13.0","npx":"^10.2.0","release-it":"^12.3.0","ts-node":"^8.2.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.0"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"fe5081e5eb484fa9f16b46ea676d10949c67cd47","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.1.1","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-W/7qtP5bgXTI/rhbsJJPHyIYDy5iSAD9GGEiW0QXqU2OjieAlIZyQPLl6/zOJVFlz4tXZRFwiJcj89jsxSkNIw==","shasum":"cadd8a3ac4df64f4f5fdd884de51d2b93a9d2168","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.1.1.tgz","fileCount":193,"unpackedSize":136712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOawfCRA9TVsSAnZWagAAU38QAJaN8XBoXb2G/IkyaI6q\nHgQC0+iXcG6pjH+Yj24Ajy/pgYeL2szm44NGt6R6KHu0r4Et4EW+WduFcZUX\n8yUS+yUC/VJFo/+gVGTD3pVey1kcZgTprfyYRrRQRwxUeSZlVoktPYv7YeOi\nmJ6XWAEaJX0WRSMU6UgT0yYxP3tYWmete3DRwh79ihJ6mUdhlEJ1+yOix+gh\nVPWh+1iFTkndd4Fxp1hks41wJ4TftGkNitNomepWOzqRc2uD7Uy8yNdhTa7+\nspRJpTdEswp1NO5qhl8qxP9vsR3kA9zdPeQKo0UyO3dbkijhPrW2RoEHZ1Sw\nVSWEcW7XiJE2++oSNbWUSHIAWC4vSevIgizKHKF/HIQ2c1jobblYZyPoBfdy\npE1cNagLNGJz2HfnjNI3q8miwzadbF+vdRiJUiGIvT2y4vKwniAGcxLAo+/U\n8A8wYEMzetZ0qU1hbqbUK7yASA0/uB7+Eg/iOkAYTR+AAyGoDc8G1jwmtDh6\nsHB4Q30CYpiCPGOVCgovIKfFY1NDX+pIK7fRSyKm3BqkigfD/gfX6FiUHOkK\nVSFfMI0fjiuqplevx0eTgMlhIZf/NxlZoE1wN//I00M1MWqRw3C858DyUrd6\nIa+RVKcW3/KIMHLujcDqZeFIYKUYwiyQsLaU2DSGbpN9ZcQPVRP/eiXcamdM\nycA6\r\n=GA/8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6zuRwXH2puo6SUtBaTqygiwvadqi2Ewn/oQvgFwOizQIhAOW4WSVSkaYvbyBDYq1aBT5F4XqcjNC/t/NjppB+BNVW"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.1.1_1564060702993_0.4231496120863396"},"_hasShrinkwrap":false},"3.1.2":{"name":"ts-toolbelt","version":"3.1.2","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.7","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","npx":"^10.2.0","release-it":"^12.3.4","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"6f23ea4e860e308caa205ffa47cf74bb31e5fdad","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.1.2","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-QNYHCAeiFBARtlvdZEmoGkLu1WjEuWoMgZ8fupzgeRKRQx/hw5H/B2tgABRX5sm2UVPDsg2HI+CqEUy8Qd1Zyg==","shasum":"5edd8006256e852a1f030e2fb2c7b8c5f9713dbb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.1.2.tgz","fileCount":193,"unpackedSize":136712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQK73CRA9TVsSAnZWagAAp8AQAIAtVMxXhcqf9hqiAR3u\nNdNrE9A1B+77vEdXrCw3S4NSomKzKu8xFSt4MB5zbVRwG+HltWD3sezztpdN\nEpMocI+vlg+ZPbUTlDxVr8oORB5dpPvUyhmxtJGMWjLOY1iXd0HzCKX9Lqua\nFm5E2olbTxu5CxSSGg7BiVoPfvWCGusL8EreUSJrAIS1zzVuzXtH+OBVz8jY\nrUjc58e6iqIa9Z3EtM9Iqraj3iomGQSqgfPNMDst6ukXdl8IXxm9opfLBwom\nHHbQGoJxSo2HgLQBEq+e0omPMNFzDV4crpwhniLT4aqVt1WvGa/uWrD3S8A1\ngTiwv3Y6fhMDubWkjjP0s858eBVRGt9YIy1mtlz0ILeU5jPMasuK5EBm75zb\ndCgAZ/MBat+yimpjIWEZmgG2X1UnH0qfmcdlYVgDt/Me2HmCGvFjwM0hY844\nqZ3i1pGRmMKHOC2upwMJEwwlNt9zbTKtZFi2kRNTHcANbgoTinOiZlRuv3X3\nvliOTPbJF/+Jfl7sKdTPW4tIj+hiDzxAB6rqxbN67phYvs37wC/U1jAnmGLy\nT09DoR4gdq0LjSjcApbC+FXKkGPNjkVfb8xWOlzbrfta4YQLvIvv07zMRexI\nUaj2lkP2GYS2+C96YIQtsUo7dj5Nsm/o2w2i0n/43TjRffnXY/VMYEXZPax7\nG6Pd\r\n=KNgd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKcFmhq8WDQrMMuDbyv6Ic4HWSmho3II++LmYYkLAJSgIhAJet4uxjHYsonHcH+RsFBj6qNnzchdQ0GUEHWt+yovgb"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.1.2_1564520182886_0.21331326072318046"},"_hasShrinkwrap":false},"3.1.3":{"name":"ts-toolbelt","version":"3.1.3","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"release-it"},"release-it":{"hooks":{"before:init":["npm test"],"before:git:release":"npm run build","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}"}},"devDependencies":{"@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","npx":"^10.2.0","release-it":"^12.3.4","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"413be952edeb492188dd6629309077cdb63b0814","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.1.3","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-IzncVIhEncih1mExhM/nMGQrzM0psUngKYPkY1tWrjq2DqOv1eH8+hXau0Bgiq+luYy0+UUE0h77502U9XJ6Hg==","shasum":"e54387cc8bd9cc87d107b6dff539fd13453e2b93","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.1.3.tgz","fileCount":193,"unpackedSize":136773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQb7vCRA9TVsSAnZWagAAxC0P+wcx7b5Z5YZXxhuxsTsn\nuWwh91VCPZAni1cuiA7JyqLtKJWCVHeig1lRTtEA4ypudn/1IPPHqqqh3/0i\nxMCM3zCxGVuF+wUBQdC/kNYriJO55rCmBokQ+JgZjL5nWGVm/jTQTug4v7hx\nufFxg715TIxVp1zkjwmEGkHpyzF5NdDQWSl5I16JCU4m9eWcNuIhG24Lpl/9\nIk+6sPoK/RwwJSNu+V22G+hDKgp4ZHpsjqvi0nY0DcFxFBSBIDwOJTMA79g1\nGpMtqdllnEP6e8XpkMNBsEfdLgrdaJHf+VwVoC8vI6doteBbO9KW5oNEi/4y\nRstajKiW6DIXQO/3lIg9W7uXNEs4IlPtODUEMNU6ZILvYhZf/L7niroB075x\nu/k/iFotoY17JJdGtQmya5MT9x4LFRnYnYBlB6Ue0ZsxiXUUuYwwGCKqZ6eT\nL3xduAJyY8aMReJmN7DBJAVL73fZh2Y3flQbwYzQavLGjSDmrPmdtiBxTKq4\nmOcOno8+1nyee2YiE8n0h68WddM9LECgzXWglhmn6YMQZshIZh8w68i6g0r5\n3hfRpEbWHsDnDLOublKpPmobWhKZkH/U7Vbn/KQPk4b9QseALE1nkmiom0bU\n4yF6MhGTJneaXz9O0GJlhSQ8pOThJyUv1p7zjgfI6I+TicR+XEG7svFTtzT8\ncPwZ\r\n=ghC/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDS7Ln0qmtEPk+YoL3qBbz1xKPAFXlSVIlFm49VfdvIggIgBQourOy79Hmyq0jDZKM31mRIJgdqZpGqxiQwmOBllZw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.1.3_1564589806839_0.2588993676246878"},"_hasShrinkwrap":false},"3.2.4":{"name":"ts-toolbelt","version":"3.2.4","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"standard-version && git push --follow-tags origin HEAD && npm publish"},"devDependencies":{"@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","npx":"^10.2.0","release-it":"^12.3.4","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"42ee998f40b918d5ff6134da944f130c6d7ca951","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.4","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-BNf9g4DjFPZqZHD4gR0hREvVtQfMlxU4/rRVzZ01YTKn7RC1ecjn8K+GNOdRA9u7stsu94tsWLBsoP42pIIutA==","shasum":"b014a19aa296b0c901d2be2ff576f5d2a782c83e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.4.tgz","fileCount":194,"unpackedSize":142222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQtyuCRA9TVsSAnZWagAAeD8P/3VOFtBahw06SPzk22a9\nUOrRwSwD3jCv9mzoHTJI5i54xHRA6NaXfd94snEjV6Op/QbG92cof+yHH65E\ncVaV99UjrJQY6/RMtQ9PZNbBB/ZzJtizH3zflQU3gQgaMRfpZkSmxpNzjy3r\nvfRc7rRD2AiVKX4h1ys2dHW7F27PjLnbAanmo8CRmyJD+S92m+MDEKl66WqF\nIEJvr/51N0xlUubYWTh5899VcgRxJe2gW1QyNcQXsVsm5A9+QXRP+Lh1t/zS\nm+hTb12G8hGWV9S9VS5EqGnH4kyk4djriZQDECMXZ0/FOt9b+hFeu7CflP43\nmfzKTAvO9xUAnnLvBKGzuG0Epf0ps4QoOSMYPR4WqQ05WOpyJKpgf81cv3NN\nwGQraFzn0cR731giyzJSxUsCog3YMNeYBXWqzns7spIj7HCeNovxz0IOKyzp\n1yjUgJZOJfFlNtty/m0EsdRCfsc5vI/CDrxUANa8daJSFYzmM535HZTN9w/Z\nZXKl91Rsn36LIBYVT0riGYLoq0RuYm4ccAxeL2vUrW00OQDZBLRmE0fUj+vj\n89zr2XVzaJtv9dSmUpsGy0C+zug+oSB8cH/YLmM1qtgpKagedZSB1wVhuRQB\nB0nWUPZmR1auqra1rj1G5lnEI4lJQHjprj5MCGB2h3F69j19Sn5hfWihBoxg\nEvSb\r\n=fFqH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6vO7PjIn2igXo3dIIoJgxo6pvPVoxCKSqXoJT4CVx+QIhAOms/CsxxQzthF3FZhrxJYlK1FUnee/5f8ETAIcrxfZq"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.4_1564662957728_0.1205757824642788"},"_hasShrinkwrap":false},"3.2.5":{"name":"ts-toolbelt","version":"3.2.5","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"standard-version && git push --follow-tags origin HEAD && npm publish"},"devDependencies":{"@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","npx":"^10.2.0","release-it":"^12.3.4","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"04dca5f3b1d7b4d4f1922cd6b109488388450ec3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.5","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-35yn0TvSX2pMs46tW3uNg2wG5GGFtGuZbN1Xr8/XPLX9EDwpMyd0PdFBlqr+c/LQQihxNsQh0oI016mhv8mRcw==","shasum":"c92defd7572fe031430fb738ca35dc8d1813da61","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.5.tgz","fileCount":194,"unpackedSize":142311,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQt4TCRA9TVsSAnZWagAAhLoP/3WnDMA9Mf+VhRoDEN8t\nM5guEgdtK2ueZdKVUIyQhEoSSshm/rujEpGGjTPiv1k3g9MhLB4OJGkHfhth\n1kzZfiXy/Sc93cFRb0yyAYBkM1Xm3Oqqd7PTB/ki29YFmV+xR7Zd2qx6Ghkk\nUQFRUgtSDXzeOjtM4cwDGbnJz9ZRRKiwvTNhPJbAFFOTtRdFqzQUCCcvnJ6+\n3IJNqLTXuh316xoIXtVYETUVlqFrD62o9cb0bzl+9TtiO3RvWEj5YDjd1/fD\nyiIxOMdOU5UX/+JuLqh0vgmZaTDPXdrwxtKqYZZZgjEt8g/OCBEMAkoj3lpz\nhbTLvJWYn3AU6hXdGnEeD9cWPZXkUEAtnGng/WLdXQHEnoNE1GqhabUmHOs4\n3wyYyGUheHANhH9LCXr9kg4u1P+EIB+nabjT/fbsbTIhQvM7l+cwIaF8Lli9\nKKVd2Ul3vmkft//SDONxOLpN1TFx9V7K0PXFjeoc4kQd19sTRF2t5b3va+NE\nCUMxzExD5Waug/yDzDpeDVrSorPuyrEKLUETvQqOSb50BIE042XFE0trWd+m\neR5XdV/BfW/ai/pJTVQFMPDNX4h0R3KYIPlgtQgwSnCEZXMm7olAnYGb2IP7\nNXh6DtSzooz7HlPJGbKg+x95Xh7ikxoq27SuWqZTZ6F/0viIMoQ7aipFJTD+\noK6W\r\n=txM7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeRF1qPmRb+3qJ08D3wc0RMOHFK3gElpDo9nGY76TXYAIgUHGTfpXsC8/Dn0RxihIPhh+bl0P5P1FuNpFKhtXFaP4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.5_1564663314946_0.8289635716967259"},"_hasShrinkwrap":false},"3.2.6":{"name":"ts-toolbelt","version":"3.2.6","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"./release.sh"},"devDependencies":{"@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"31f2226dbe4be03c7bde82a28c5485c0b38350d4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.6","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-PHgspVz3gh9ASBIf0WjLvFr5v5N8wdtahYgxTeSJn10hb9mP4JsmNc+vaNll69ZFHruaLHzqpfkeP0nzAgQEog==","shasum":"83c84ac57ee03a0fadf9b383d131afe2179ebbbb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.6.tgz","fileCount":194,"unpackedSize":142294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQuKOCRA9TVsSAnZWagAAMX4P/2U9+J5mG1oI3P1U2nQb\nRJJ0iVQ5xqMt3YPWebJRdSvwD4ZhsH6wN5ek8UBEYHn2eJKWnlaZ+6OqhJdL\nfatwCy+wYcO5k+KRIYf3cwv3BHbbi6LWZiRdHH1cgpcKce4iqBN7qgpRLtOc\ne0fNw9AKLbwliGDYo4yjMcRxCMk+zwhSgh9lkZ6yba8J386+qJFRV0QO4Fdu\n+o9sEyBbrcSrNXJuEh3Jc96Apx5K2SUsDSv7QECKUkDzcTEt0SYycyetGs+b\nXlRY9LgRODv0KWTK8MzM9JhILOvYSanWtz1i3X2asYhJmwGo6ZPZeyd3xHBw\nB9NxUmsPPaJKcBmeiFOUyx+88WXfQbMFF/L/6w1+WP4axkvXvIuIp0c5YJIs\n2cflyd+BkJo7Ghoyyz2FOyiPvAG2Ct+XkmQOoogBYbE7tYua9E4jQJsYj6sq\noXSovbajd3HY9JKzFIutIBTB1k23drcY2mTjwEi+2M8bDQV1uZBqygLBlgS5\nJYQdVaQo93x8dwj5rRgQHxsAtvDDciqbiKnoOcMtBFJWaspdVY/0OtcHqfoj\nJb7+Ygz5f7WfcUtAQ2+5ZWRfYHXWOjuHPD/1hQH22VpGL/oWapUzNDzOsjVS\nhNkNvyeGxOR/4wTVy/NsGmNwmstED+kNPYsilpab6iJTzP+VqEzxnEmudu8B\npfcg\r\n=ZqZK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHemsE0MmixWL97izK3nT7TF2GvIiUrH932E4Po1IbuYAiEAnTBE2w0htjm/730/WDqsimUpIIW9RsAf5x22Rgil4N4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.6_1564664461360_0.48593734158393764"},"_hasShrinkwrap":false},"3.2.7":{"name":"ts-toolbelt","version":"3.2.7","license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"description":"👷 Higher type safety for TypeScript","keywords":["types","tools","safe","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"types":"out/types/src/index.d.ts","main":"out/index.js","scripts":{"test":"npx eslint 'src/**' && npm run build:types","build":"npm run build:types && npm run build:docs && touch out/index.js","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","setup:dev":"npm install --only=dev","release":"./release.sh"},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"dependencies":{},"gitHead":"f711b64479bd84e9aee46b4697b05388a38e2378","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.7","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-z/RiGPQUCZKnL3XbmLnONUZT7WfEIvuwZ4Fq8EGuRi5yozPPReAYRJJr1s62AyHc+MNoiUhQypFvgNag/lqnhw==","shasum":"9cd05ea27da15afee02c7fd09cf5329f9c211caf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.7.tgz","fileCount":194,"unpackedSize":142490,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQu5ZCRA9TVsSAnZWagAAiVAQAIr5PgG2GydtOcrYo6/9\nfXvpvhlOM3GLKNHsBOxDl1ocnUCoHMuNxVCtGxU5DbPpapLt3OgKdRpEwhsb\nf5DdwZIhjoHAPxAWHFGbC/GNtD5SiWRjH+snDfP6b5TiFezRPOG6Fjn3oC9s\nd3bgB2nPJBkQoVzWrkvezBGjSajP5oYCPuhCYfsLu05k4F2NWOH9aoyuBMYf\nasNN2Fjag+h1cfSNOyDgMng10XlRQ5aA9Z1aG8jzSIhNz2ud2zL0phVRzrlA\n83uIWQDRpuWNoaAUe8ILBMByqzBjJWMSHB5cnL0XfuOalJi1vbRjWcDHs5PC\nwqwOrt1f5KnyJv0cNl23WnfMs229mBWLAGZr16MYAcxcOVFXgzIfPW0P4+bz\nIchjV3L1lGLqzL6tMB7Fmlt3AcKeSces/xVkdZkh2PhbvMyFnkdk68a4deIc\nxHEmW5czt4celO+f4qdC75zmizE/ZNYMmj86bXltH+H6qPDSLXwdGJ4Xooex\n51/ts7v7eYQBO53dQARAMITKnFS80OFcOJECajvd/gNYvCbcIBQ7lybEEVnQ\no5vrhvwUq9KCRYVzZk/DIaTkM3/3x0/tdjg5fFlXbA0tMTUxJ6xs5XizjpFq\nU/W9EX4XEVTdKNKwlectfnH72zglA+cWQj6ATZ4mrflRzCxCoy7/qEAOWN7o\nz59e\r\n=pmt6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfzRGD1Zy4EtN5/pkEDUKfDCh1Xd10CqqeANFExoODhAIgPL7ydFVirKqLYqxL01gDmyexdw2sZp3cR6LUvXjL81o="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.7_1564667480532_0.16379790332723454"},"_hasShrinkwrap":false},"3.2.8":{"name":"ts-toolbelt","version":"3.2.8","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"npm run build:types && npm run build:docs && touch out/index.js","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","release":"./release.sh","setup:dev":"npm install --only=dev","test":"npx eslint 'src/**' && npm run build:types"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"c6909bf685599e7df157948ffffb36f564718806","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.8","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-WFpw/RxuMMHAIfV2lcDBi7CGiVXGHP7EeoRuCWVtNZvgSxnPdsPsWuqeC6WGpUW4PEQXv0ImV06qg3VevAj2Wg==","shasum":"90f07d915c7ec709fa364dd37f8af351b6d0ecec","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.8.tgz","fileCount":194,"unpackedSize":142617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQvLGCRA9TVsSAnZWagAAj+cQAJG0EGvK2iSOgn2ES4ji\nFIVV80qp2SLDrL603L/E8krZHxNeAfHcoqv7zycdeBWNZFMqQKnDD5O25eHM\nJsL/NWds6w6OaCqp7H/WAN2BtrmE8CQ3+oRpuZ8nYVn2dRawUDlZQhVXH3iB\npbsqESdD0h1HEUchMmDpPJe4+D0PyFG1bK4aeJYRijDWFqirx8c2hqtpjAPg\n1gHWo4tTu31h08brXcr3jDwnYNjjFEjcgKseUUAJbKw38cw85dLQOAviiq65\np3afu8mgeH6PDKMeLEQHbDqd0J/STZKe3dviz5xPQJV0JaeCDQmbBCpU4/QU\n0ggoTGPSza/TAPjzG6wC0bYPcuyuW7EONHsj0hO8c31JO5msm9hWCWdcV9gX\nM5imLhhUK3Edun1rSOiaN68UDvOQs4k2nEAaez/L+blSNKK2qhD4QcolvgOy\nBASQbDKuJi1v3nrjULAnoiy2D5E+ELK+28Sb5Z+QaB1jweFtZkXrZs0KcclB\nhpCng8CEpSZVKZWjTku7VC8Z4B5ct0xfVrsYFNgPxVVqv+//QTgJzLeibdFW\nH+LgDLFwYXNBfshhJ5bU7uFaNMhJrvfpfuOBS1bNagEZkGadz7KtASCGuoIZ\nAO/sSbTkRftvQmSCeLEA6xI3NuYrwI/195Hxhkz8j1bXHnkL68xv11m4arIK\n9zNN\r\n=1MCf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHfqT7BJu1RorAkrPGZKLynyBiM/QKMXFOtpX3qnKQYhAiEAxA+czqcxSFIW6CQRLb+pe4myeB6YIjw674P9uYBlhnA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.8_1564668612792_0.7312296022648341"},"_hasShrinkwrap":false},"3.2.9":{"name":"ts-toolbelt","version":"3.2.9","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"npm run build:types && npm run build:docs && touch out/index.js","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","release":"./release.sh","setup:dev":"npm install --only=dev","test":"npx eslint 'src/**' && npm run build:types"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"6bf95c535dbc741846c0f44eb098250a46499a62","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.9","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-k1EYBmOyT1UAPbX4OnrqGQ4/bGsJpfVg+Npdlvg5y7EqJ1otErfk82Frc9MhIh0oGDClOEq5yZuyUxEju+IpZg==","shasum":"3646b6aacf5192321847deb83265f4928d15e02e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.9.tgz","fileCount":193,"unpackedSize":143378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQvjkCRA9TVsSAnZWagAA5OwP/RbeNiXzUgINjnWgyqDC\n9AwMKH/Fc2MqJlitJfLKh8iXBJWmqHxx9aCEgPjU5PkRmJ7md3jsB579HLZr\nDokSxwUFRGUOUHXvS6krvO83y9QslqjwyO0T7GZ8CHMb5lrdQ9vBDWvzZKo+\nA0NiGUpalm6csluf7XvxQcXe9lXjnfaVSMpruhgguUzR+PRUhEIrwcQClvL8\nFie/Wwie/y0xFhBvxhzIX2xnT4gImphP+kGrG/n0BJnwHmfebgm8in2q9YLh\n5jZC0GyldWW/TqFYdfC7CuEPkD5Wj99ktChWO1Z/nMh1rYJrI/zWQU7UbfeN\n8kqRXtiiFpQjmUMwgOzpwDc1wFuD/n7F7TE90eV7ZA5wAUtWbJ+j5I/PIgjG\nDCsMGIivKS+kVbnCcpyd2mXP7ZpZZwWEnBjVQ7uHET82O34dvGIpJdzOS89D\nCAZpNumK+FaUC4VO3PIzCGm6I6Pe+w55mOYO0ORXnZn/on5kaIZE+gzGB3tb\nbie6ICDlCbYJ5xMNgWKUOz7K9pw4XK6SSRZPP5wK75m+DOS9MDAeZ3fKYgA0\nybr5bpEuXYH9hM8fRu17mQ3dGt0nvo5p6enyPdrLkXCa6UCDacN18TOknqFj\n0X6pX+gYtM/3IRH2T9xJEC3kHsQc9wmhhoG32PDULBNTJ6Utq56nC/smlWKV\nygCC\r\n=0eC7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGybKInnl/mpjiQmITJa81qOffcs4dmOFeBSHPXu7MGaAiEA5SYYX0Yjb3eIYS78UyMOfZcmHu/gETyA8PA6uxMMVqc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.9_1564670179406_0.567231392052856"},"_hasShrinkwrap":false},"3.2.10":{"name":"ts-toolbelt","version":"3.2.10","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"npm run build:types && npm run build:docs && touch out/index.js","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","release":"./release.sh","setup:dev":"npm install --only=dev","test":"npx eslint 'src/**' && npm run build:types"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"88493bfd040c3a6b677bea9c88d5e63998022d14","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.10","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-e6uo7Q8dDMANJXhzDTEbc3d6iuSb3F/OqmQVMdi5eAnYr063QejN9yhuE0+DHKgTmgYY9is2+k5Kx/EdQUeHYQ==","shasum":"45b6a9d87ca99710e66cf9c9b6d3d44da868f94f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.10.tgz","fileCount":193,"unpackedSize":143624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQvnmCRA9TVsSAnZWagAAR5sP/1/+QyTeJHp5cDSMgNVI\nSZWbfPJfZixJJogwSfY81aMTludJNoCVFxOD1Hj4zSLsRVzUcWBqKimjnMoN\n29O5nFubxlUy8yzp37y8SW2wC88XFqVzFXlUMU/zWuDNSmReJRJH9Q84ES3C\nET/jiLxurAf6/2xccY01TPH5LfFL/xiRyFJlwAnLzB0X+KEapsL6JlHd6HdQ\nY1YYzlQaZIp4mBGZ2Hu8dD7dgGiJLAZVXF1UPLkUpsbR467cjV/pqfhtuIef\nf9iHAigYx1fTRtDB0AGoBsonIlQba2n0mcsQa4iFknzauaTsVNapbPBwJGde\nhOh97c8xzCR/Eyjfh9XMLq5p1PiB/kzZiVvBzBZar/bOe66omCZuSs9FDBBw\nu9qTohxPa9FfhxuVTq1vzWER6+hAkTVTSzjQ7QK+vRC7x+JVXBEr2x7mfArx\nd0Qg/8su5nGrVL2PqJC1Il0mTsjp8HV7ag+vc4fSF687oqtMxCps+jqBH5MV\nABcz0Ffdy5EGpVeNE3GcTaL0A/IaDLoXOadl6gZF/ofYNMRsRzeekPho+SVP\nSBnyqhA2VgqXzlWcCLxy9G/NkXzFYNmopZouY9vnO9zw+MlUY6YnFREm6nA6\nVJuCD46NtmZXqZyNqSPr4wPGN652U2tyjBVs8vg1gr9JX7kx3UGmimPU8L5K\nsNGW\r\n=a/Ur\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHK+Hfa71oJqTecABS3lVW2OpnTSZvQYSgUI77iAxIecAiEAwvy04Kf+lYqToGhH8O8Rp8Cofompv3QprnlMylTGSF8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.10_1564670437596_0.19159676607535037"},"_hasShrinkwrap":false},"3.2.11":{"name":"ts-toolbelt","version":"3.2.11","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"npm run build:types && npm run build:docs && touch out/index.js","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","release":"./release.sh","setup:dev":"npm install --only=dev","test":"npx eslint 'src/**' && npm run build:types"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"a1d726db6b380d3241809b3ad032cbc7eed10dbd","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.11","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-fDLgGas92Ri+UP+w+5J3ox7+kFnumUM0R/jfJTcrjBNfTZiPyD3yx4o1MiLr2QTaFgqP7N+M+OomJF+UelWOew==","shasum":"766d7f8a1c3e6b266b6e0fdf0a33afbd2897f6aa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.11.tgz","fileCount":193,"unpackedSize":143718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQvsCCRA9TVsSAnZWagAASkYP/A9Z2+4Qg6OBbBuNhg9e\nR1RA75uhcV7qntryqkiHsy7eCcvLh3uq5H05TsbuPW3EYfVAUU3AAQ6kkLQV\n9Vq88UcDH0RrJwoEm/fV0CgLyr+2KKgT24bFp7NrXb/A+ETuNa9cykZI1TVM\nztajjwvZ3IjV7sjMh84r2IhcdLIQZZjIs7KRyQca3rZTThpxYrQlDtbsTGni\nf2Wj/5BU3PBE0IpKizGtkTzoL/ldR2TD+ark/vfydiPb0//Azz2xkJvwXad/\nP96qAY06ohUxw2taSnWcNMzeD17ENKTYRVkZSG4q48LjELxvMtJDWpXhcRAy\n4cJDXUm23qZ1F+15XHdVdOgj8YuMb/FkbSKL8sQSVGo3zVHlTHBifTjzKOc4\nQKD4k4e8dnJRKA0TGEXjCRGzzo2CJjrBtp+4hh8ySpCEkr6Km/y1FN//kbRQ\nE3BbILaYWkQRZnQeYItGGCjc+gZ2N3iN6m+R08aAcRbn4NLLiazFM5FJkeRR\nmwPbr8GPDVXQDhZsb0InviAY3DSk5K54F4shfL8pIZ+ZsKTZzbLbWXLg4c9x\nwtmOolcW/z+Hp0iKG7i92bWp6Lq/7kPhSXKhWQ4uQgb/DEi6q31tSkOEfEhB\nC2aNogPN/q1TWL3iJUgae2vsuqLJNVOCPz3zyAhwMUWXbeEGGzbYcB0rSXu0\ndVyo\r\n=Bi93\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDA3Fa1i49+RvgwS6zYRZbplVyiOOUNJQpuGP+zJHJmTAiEAm0fEUkrxJuWS/cW0gw4Ddo8+VsCU5EZLeCNH07IkSVY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.11_1564670721643_0.7983836847408221"},"_hasShrinkwrap":false},"3.2.12":{"name":"ts-toolbelt","version":"3.2.12","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"npm run build:types && npm run build:docs && touch out/index.js","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","release":"./release.sh","setup:dev":"npm install --only=dev","test":"npx eslint 'src/**' && npm run build:types"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"27684908a93aed4492100a0fa892065998621ec9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.12","_nodeVersion":"10.16.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-u1tjEs72akUVuAX7CBANSBwlMZRW89W3ploaxqKRmDgADFDOahYZryH1Rt3Xl3dbVV341kYunaE9zeQap/OzpA==","shasum":"a6c0f60973aad486d29e7d106c8a28bc39f5a5c5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.12.tgz","fileCount":193,"unpackedSize":143823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQvt2CRA9TVsSAnZWagAAXJUQAKNgWHYt69v9lvBFAcOP\ngwD0ZoCehXL6mqWw64bX3x4wEsmitNe5YFQo38h85bTrXDBZt7d4Lg7sSa2L\nnbFdmEmTMv221fA5AfYM6GL8SFWeyyr5j78EGk3z4lHFmiyelFuhh4knIhsC\nvw5MH82BLrGeQDvUi4bSAn+M5zPfa7tRvpkd9Mcq7050xuhdbqGDiWxBJQCe\n4F+v3nfY5GPYxd2lPhl0G3R1J9xmn4nwd6Dzc8lc/bNIaumRPFiFObaNE+KQ\nwet/SWBjsIcFFVbIxaKJtUYODiCxgfJJqZKUK8mHJUGQvj+XvxpwRaqITp8R\nfeAL2dPjq4dwFD07hXYneSsZ2FL8NYfIDSTtpjmc3Hz582DrESJJkfavFUI3\nyY7jzqf6GAxvpHO+RYCNg3HRWT9pYWglbPwBhKUX3LQMEM4TqdXQUHgOIgHU\nX1Cit3rwBEBvOB4psN/nYIqGnaftjmHCe+N0Zk/nS68lXfOdPaF1hGjOIjOT\nNJOPZiw2KjUPbfzzxoLCk8UQ5lGP/eBgCmZYeshIBQnD86l38tzLFwj33MjE\nvJ7caQ0bRyYbQTtZTlk2Z63iS/GZ1UVj9zSqmxTMuGhbIfx/Pxl+3sDZ6LKu\n4pw3uswPGRgiehUCMpLMyE/fB7Cvx3Y7eiiCD41lNiu7mPXM9XXsXa34xYo7\nMPE9\r\n=xFt6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVH075FuHfoSa8zwl3SIIXzisL+PpTG4MvKGIICL4doAiA22K6Wn9knL84qGFgRvhoryRq9HCeV8hgigB9m/1fmZw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.12_1564670837554_0.7000753764170353"},"_hasShrinkwrap":false},"3.2.13":{"name":"ts-toolbelt","version":"3.2.13","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"npm run build:types && npm run build:docs && touch out/index.js","build:docs":"typedoc --out docs src --theme node_modules/eledoc/bin/default/ && touch docs/.nojekyll && git add docs","build:types":"rm -fr out && tsc --emitDeclarationOnly && rm -fr out/types/tst","release":"./release.sh","setup:dev":"npm install --only=dev","test":"npx eslint 'src/**' && npm run build:types"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"aa9b74d6a05c2f002d44a90b6a6eef271efd3fd1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.13","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-thheiZl9eq+cMjuAZ5MWbpbl8xrH03jU4j7NyFZJ6qEZEyWLc23JXREK08XqNVGQvpa7sYg7Bg4PVPnMlAC/JQ==","shasum":"efd39396a7ef2d2a50b176f4b61e3084d9b574df","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.13.tgz","fileCount":194,"unpackedSize":144046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRE6lCRA9TVsSAnZWagAAApoP/0JJr219rwJmQo5yiTw4\n5mIQK+UYRpBDKwXXZb7L2eMSHMf0zgiJ15rg85c8GQW8okHdJH2celoG7BJB\n/nfhRQZqZLFNX+at+QTbcjsy6hREpBJtD8J11zQ8GyOLna3//GUlp3VDx4ZA\najwBYTnHEmPtoph+2W4KX+iab//9qu2EQ6pLWjd6iNiS414EnbsJE6bI+At2\n0B92dLjzbwtkw3TFMjWQfwBOFcudT/XqPfAjCZVpi76iwKPy8j2rxaPqBHSE\nQJGqV0zI8IqvLQ2dvus4W8RvXhBDHis0RtRmec0XN5ZQcSQLkJbhwBFY8O6I\nvZ2knjjHZwhxuZRu7EL2rj7lz6VBzxzKhjch7e+gmMZDY0ID1w/jLjCGj3Tg\nVoSqk5CoLGekOfTDTV/KvOoDIg8Cp2Ldonub+WY92xCjWO4lFoVuTsIx8826\nPPjcKp3rlb4cRhCglGwXnea+U/OtjC6Shb32CmdW/C+x9RwS69/qL38sN9mB\nr5tQ8OjiMqvzgD1pxYy6u1rLa4qwTkiIau/+yITPTNiGXR3hiJ4AIrH15XW9\niYuulgf/a3WZjlU35meeCtfKH24oOzMddAwRaZBai/sY+rN2stpeyxul1RvW\nxHywUjEJzxOe/INq38JJmgqDz2wVB9jxajF/MB2onupjGyiRIwqBgiYi/1VK\n8S8V\r\n=lZ9b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCgKpa3Agg1VYxgIjcJslGBu+gcJ/sNEU1IT8HivJhEwIgHkTIev+IP7xxdaLYdohYc2OwaXkfsZe1lcyAi1HNwfo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.13_1564757668525_0.11437225142507912"},"_hasShrinkwrap":false},"3.2.14":{"name":"ts-toolbelt","version":"3.2.14","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash ./scr/build.sh","build:docs":"bash ./scr/build:docs.sh","build:types":"bash ./scr/build:types.sh","release":"bash ./scr/release.sh","setup:dev":"bash ./scr/setup:dev.sh","test":"bash ./scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"60d59f5d697b2158c46025de3f2877ad1361f616","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.14","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-/PS1x8L3elhi7KYETYPbyQOkK4krTXuqb290tE2F2KVAJNdzl7Ix22/aGQ8/VSPumPHiRUsYcvCsnqD1PDPrLg==","shasum":"7ecbfd07bbc7cd2be2643e8d9828ff67d577a61b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.14.tgz","fileCount":194,"unpackedSize":144087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRFaXCRA9TVsSAnZWagAAeBQP+QD04se66qwfszLjliTr\nBM0s9Mm2N6CXwqsekZYWarGI4vRbgU+5uzWHhfLM+V3PtlRn2f1l8N7Rj21S\n1haOvzFlL6nnt+ICGxH8ru6R52YupeCH5Xrcl2HXijslvZO2fEP9h97pTm8v\nS7W3GI59XRR8cQjN5mN2XxZ1L66g/TG4b5PyZyqXLKwfWSg3qTNagtZ8m4xY\nVs0SEqdq1Gz90/mIFBxvIVd/15hRqQbPaabABdGKhnpsug5jFChg1BWJyvjZ\n+/wcsL7pV+rj+OZYQTRBxSrkkp8KFej3uaBzATqFUqVyxTQmduaAQRhKdAzj\nPODL5kUlgL6jBUe59tJv/+9GgfJIWty1rIwfl1ZsPg7vWQIVhdR6CwbP91C/\nShC2TGZFZtuy2dGrkjks12HxfTIqt5Xn7Ugr4U7YfoVXgFenKuBxSzz4aXVd\nG3G3x3JTf8/ZeHyVttPvjqDVmDUNHfBq+kiUIgbSaylr3Bvmsi+ilSGlMyyb\nHWuCcD5VzZhMiOM2qCszXBSy0H1gDMznll/yx0U4mjBYCHenNWxzXx6tEfZa\n0w5SIudmu/JumRQ838xWCpKUk19I4Mk4DvBq3/cEoxF6H4UxCET6BhKHyUm8\n8upUsfrc/ABBOzGsJrtRsNJPqHZrVdVc71CSaZ2DwgIOKAVfyaWnZl9DClD3\nz1m3\r\n=xcIi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDRRB35JgFuZR30IX+rtSGg82cSW4QJXNmPpBsdm5cxfAiB8qsQS0bcUBv8EQYxsaQPEAxq6SL3ezqDDUxooGeV6MQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.14_1564759702939_0.6904406274994181"},"_hasShrinkwrap":false},"3.2.15":{"name":"ts-toolbelt","version":"3.2.15","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"abd0db507a559aa2747498cfc8e604ae432150bc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.15","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-Q7FZMHjbB6EmeMmStTB3DynUCH7kYg0j/L7Z2ZKKKDvuoGe/TBUNZJKxfjytzAJvOWBIJrPhGq5aLZZcyr0Kzw==","shasum":"d46113603f576a499298b44d5550982c263d2929","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.15.tgz","fileCount":194,"unpackedSize":145525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSDy1CRA9TVsSAnZWagAA2AIP/AwnmEW1hVtmqQx35L1R\nm25s4kK02De42y6DScfsMHT5JjYUEefS3krjJsxunz1+DpKGp6uryanwXyn6\n0A/HIRxOaC3Tdodm9kcLCgf5hQksMCsrIs+v0epcgKgyjdYP4VR+6oyCtJDh\nTKGS9IYTNWufO58vWr8BRjGgeI3SKGoDpVhf9bMoqNMLCcmAAuhT/IuuID84\nWcKvEN//Z4bnAtAIwzvenFwbpPDIYAYCYPqUWsrR65rfA1TfN/KkG3dkPC6d\nRsVxj4RX6t+aekaPuvrYXlfIxB5exejNi6qnbucKs8ph9lNXcMnUFsbNGYy6\nPmTzflUb2nyN8KuX2wEVxUpvkW1f+57PApQrplStCr2JLESHz12UdgPVunbD\nSygmdWUir9V2lIF5hoLUccZFrd/mvgjeDxRN1a+SQgcOvGXb/Pj4oL928Y2T\nnoCsYIQG6yS6W5aR/uMYsi7FvX63TSmXGQnhlQZcXIOUoduxlSMgYIXf6plt\nz/bgQMAsWzz88yw04UHzNfW/EdXumZElXYKyUMTg+uGHpEmeQOY1LBfgFVm6\nyq5fOKVWSXKEaXomak+Ge2bWXginrOA8HFOeO4jdRVk58Bi5DvIinsTjwX8X\nzs99CCDK8Jb9iWVNzdx+2RHQV8/76x5KkHyEN6e8CS94xjzXAE+nGVkiiyxw\nbzO/\r\n=n9A5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrS7E5rvoWDv6vk/xPlhA+oka9uVrr9r9FV9+BRmpnvwIhAJAYB+ONfY+rDQM+AyT0qGiulduQac9tZRq9SrWzIL+x"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.15_1565015220316_0.5745704171083008"},"_hasShrinkwrap":false},"3.2.16":{"name":"ts-toolbelt","version":"3.2.16","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"2ed62816966a60dc1cc0f5912b15da7c7dba17a5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.16","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-ayxZHKa9FnUOAh6mt4arDPUeSOZpVDrBLjjaGgTlV18q3tOimBr+C/8bhvS+3eUwkh+yp+YENkpCjF1p11ZxdQ==","shasum":"acd120901276e8903d1f309edc4664ba291c548f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.16.tgz","fileCount":194,"unpackedSize":145894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSEUBCRA9TVsSAnZWagAA+QAP/1VBh7xh4hjKiszPgrms\nWii1EekQBV6N2lGzKYbD0PBH2pt743IZ7cVcxlLDQr0GCW9BVH+NH32/wYMF\nnyVQ+dxq51ZGcdVmSADcxbRBPgrzLmHtiIG91rKk6uPZjjOAm6VbtGg7nkQl\neu5j+KBlLPAldxet70i6UoWY0g4afqmjSghH/BlJ6VC6YbtKlJ+FIz2hbhqi\nRx0CIPbBuoJVU5tQvziz+/yhO8pdhvPGVg/T47LREXiRbQOeqwoKmY4arp39\nT9grk1SjBCGWo3LJ9CScWOAr4Tp/T0FAwdxY3/l1iZOB/dhTaAcL4uv+Q09w\nqtN4UOF3rRq58VYkrtCYb3WBLDzOlN96H0Z3kEmrg750JoGra4MANRBdhFGT\nlLRIzNmXTe4NCumPgqP7Hz9MfUs/Oh3dUr6Xnff4muisZ6CxX3lCCeR+zSaK\nqzRcirryzPMBvrq1NqGzuZQGiOCy4vcdYUDoFDDEc5EV7CjM1sjsuq3w9KCw\n83HJgWn4bwSITPj8mtp8pYb6i09w7GQU1ZvCtpolFS8jKCieonYRt+84YOok\nU+dPciug4qM/5HhfiO9m2IKMlEBmIGjhsxUMIEH09HGObcv2Xqmw2rZ3oM8e\nphmVNRlbK+uJkdKidW1dFsS72CEVI8cSF4/REcWj8Jy7cpm03rLMHibjy/sC\n/Xn3\r\n=Txfh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBOOx6t4PKoBimovBymWBNByneGaZ8Q0Lm4MJO0cDIR0AiB3isEGH6HkKf/wgWmdAzlNk2wOa/BgAAnkQ8i7owTyFw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.16_1565017345051_0.025812562931622374"},"_hasShrinkwrap":false},"3.2.17":{"name":"ts-toolbelt","version":"3.2.17","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"fb54e4fadcc1a5225a53ddc3f7c57bd45dbe94ab","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.17","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-OHkMMWzFrIfj9o41HIwROqBhREcEyGtuRZCI052NgVFQXyCjJA/IYfLA48NLaWbdmBHpu861e1djtwkW+sMOLg==","shasum":"66033d36810a9ad3b505250d6323e2a2f4e5a47a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.17.tgz","fileCount":194,"unpackedSize":146180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSEeCCRA9TVsSAnZWagAA6YsP/0rlER+pdT2fArflf4th\nroNLR900mVv42plu9YqZGa+H0JkjRnj0N08LxIOZ3lfycWBfoqHNboDS5Gqf\nrrtMWc7IGOnuV4ewZ2i8hzhT+m5Um8JyQSnfSZ/Sn5OGaRWUh4RJxhDLf6mG\n5+z+OaOQVdhuOgPkfmYEKo3oj8z9vL2Tkv6G/LBYl2JuhbbJhp+wgal+J4ur\n0aC5pIrRFdrFDGiFSx/owZPd9RNCKk1ks5A8r3ihicDYeLcKJcbwrDjhT2K7\no8jlTJvw04Oof5oW99Lt5gFjQOhpyOzjGanRyFaePN5PPTZhcSpjRsOKs4L9\nKRM1YUpd+ccoU+h/uOasROiBPRxGtTTm7NGnnH/eAqDDgOTpgtHV5ftmB/Zp\nJw4HLGaPsPikoDzvtJSngGUb9cbaDcuvRdwqendQci7Idzx4c2epeyiranmy\nYjyUidLfO4STITI71b0TeutZ1N6Nc2SigTMJIZyIuU1fcbqD7jwYKbw48O3Y\ncgkF0Mz97/uwZYR4unDI1FMT70JSz3jgQDcxzVRAnvjmHaWCzv4Ug6cVUnJS\nZh+tOUOWsM+PiN3hpB0ASNebxszNisVOdXUHBxXrQd/IuXMO6hjUh4sBpsrD\nX660TcGPlGbKUuLyQrb6N821pxQnm5Ty/UEEgH4S/zwndFAbuUGtw5CwSf4y\nV7rd\r\n=JdnJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAuksLk5fvlRAnCsK8cyZktmjbxFUlfbYzfKI20talVcAiEAmZYme7AYqfXXAvrhz0oZOycIJEhv62kB67ncMtsXdFw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.17_1565017985690_0.8717210768396328"},"_hasShrinkwrap":false},"3.2.18":{"name":"ts-toolbelt","version":"3.2.18","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"7016b5ef28c1d4b882a9779539a53160c9d27f40","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.18","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-hRam86nk7bv269dSfZoeSCqZec2guiCXcQMSbJ0BthxYlToWTaKSB328nn5PguUB2ta70V+eAfM4qLOUW+aqvw==","shasum":"a34ce412be97fa4bae0db38ff37070308a80ad88","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.18.tgz","fileCount":194,"unpackedSize":146763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSFnxCRA9TVsSAnZWagAANicP+gKdD2SDTIH9DO9WhTSA\ngaJvpPm4z0e84u4Ikf3K3KG7Ig9wa9JLDrEM3Tuvqk2Gmm9Ci846hF7VGMZv\nUHPDjSE+02CgMch/yN7NAofcJte64E9mngNe2Z3ec/n0mCQc+1O5bMv3Pj7L\nESP4SBtdfCrDsVxK6y3MT3KzLQKzmvkdBrfXE6qlJGdpVI2eyzayHlbuQ/Yl\nxUB2qZkXY/dnFIZwUezbwNfvcqYlPT87laBKhVzCL0d7rACupaL+E2HDSC7h\n0mCDF3XuIKuXy5GP/OTi9jihCczX8tMa2lIeHMsqJ+eKsWW1v9EVfcdJ15vN\nHNzUg0DfLgoYEgcECEO1xmxMasY3wqHXl5/e8fkY+EHdK9ZIg2gUCIKe+Fx+\nWMTnelNa5Pim6bvqXZXrwXeFeFIPTIb4UqVefP+Q57XoklhJe6elavLa5cTP\nDTGE95qh+OAEIFh6gOhLhKZSIvjr+BmaWiiqZJFEv+FhxTHo3Dfy6WDCmv7W\nQxz7Uymv/ixlH6jIlZiqmFaBXqARMO+qkyKTC4koEx1TWtwSC2qq6SCA5yTX\nqiYKIiBaLOhqU4RnslzqNNY5Ofyxqxs8d9MxPaejgEoB2LI16lqHZKZ+9YuM\n303TtZ0XtXKgp5zT3yzrKY8LrpA2Hc1/R1h4tPq0Z3zGzdXhBnUk3R4Qn2f3\npt3M\r\n=B/Ks\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXcfa7EwwCqjwJtPncOVTvW4MGlDw44CVaz0D+YxOiXAIgQxisvaAu3IlftDtHJNKqg8wgkWm9HGaimFpmEEy0elI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.18_1565022704332_0.9954450082994353"},"_hasShrinkwrap":false},"3.2.19":{"name":"ts-toolbelt","version":"3.2.19","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e5b5f15133b61cfceab4240dae8a99171991479e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.19","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-piVKTOqHkb3oYLTZcp0KuL6d6n5K8AnHxLiNagW+mxNwy7J7YpQO7Tb2k1DNBi0SWIlnWvh80l8mY8L358MFAw==","shasum":"17d1fb61f45e0df327e3867bd4af80abb548e5ce","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.19.tgz","fileCount":194,"unpackedSize":147053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSKIJCRA9TVsSAnZWagAA2mkP/2bVYzxePSbhITUaopny\nQkE7kCJoeDy/d0WSyWi2asn+UED8S0bVVViYuwmAFHK6/HDsKGCFSNLPmtFC\nDVBEP4P50AKSJmrOIlRY+zbqGmWZo0F9SttfvpFCPB2sfersrU7ie27GQDlK\neCbM0NmOMaYUMu/RjirzMBURzuc/HovVpqwmQ4XVNEJTlGGqv+CUmPbIDJzL\nxLxvbm4nh53fbHwv9UK/KqEfPfQ3NoKOfq3cTUrLnNP8NAQa6RtEvuo0xVt6\n29q+9K8Lftc09aJrdbt+f9UhlopOfUCkbOBYxf8i5M/aSxPfH1jNB4I/bYWb\nIemxo7zbVATsLBNheZGkjqQuALbYS1qo5Stsz/+Tm9B2ULvZUT6H0wpZJVFT\n4zFExSwvsu4STbHfcr92xcp+xzaomu4FbmnmfVmz+mf5PMAUES1F2PZ2ajx1\n70/u2o7VPUHgLuCfMM5YK6qTJNSfHzW+8Dz2XeWsvEo1WiInAMGhi4RYRWrb\nggtiAXkmr+Rkq6t4XxuiQN1fdS7/LgtzMbzKR+x4vMgHyWrZSmZXzin1AHe+\nRjc2x1CBpwoCT1lLDTIATOF7Rlxv0KodXCGtSPG97IedJ7BWe0thKTVHP3go\nmGvfaMrlrokasC9g6rLSRCqEOhx7+63bmbMmcYKFPpe6+Z6+7xo3cWMRl+49\n2Pi9\r\n=gbci\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhXX1o3mfvDTBt2EkrBeHYlgE6TjNt4UGL0PwGKxttDgIgc/ke13QriGiQ05SC77DS+0r4z6wZmUx2idkexzsyQTg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.19_1565041160940_0.8469995069962666"},"_hasShrinkwrap":false},"3.2.20":{"name":"ts-toolbelt","version":"3.2.20","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"a6d364810a6e943158f64b3dd43a574495e2e6c8","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.20","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-1MZ/TyUPi8MBmlxYzU8rBYJ4vPg4c4eXwTOV1G4GxZh/QaNRqo5WeSaKO9P2nox7nCSLfCmYinQxmTf/yfF5/w==","shasum":"bef6bb4b2fd507eabb0a423cf71c87dbd3f4881f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.20.tgz","fileCount":194,"unpackedSize":147430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSKQeCRA9TVsSAnZWagAAU20QAIOeHmuF7y4ey5L7Pt3f\nrx5SUdCM3Oo73qcXsQdZCzNlKpjyZynbsHlb9+sCodb++fIkNRGs9lMw3auH\nIA9UG1RJo7l/UM67O74xJlwjDfIS2g44aRo4sgjKCKdNeExsCay/0ZK78X3n\ns/bZTzVedePxjhOzotpgg8dulKMu0hgZOih7YC6RHpuPHJj3L4p+cdNf9lEO\naTNuLYN61otPpXL/s1SwnCsRlP/0sGMpHsT2bRuT0OIgagQI3EOcu0b8Ywlm\ne8qf683woy3OW5qC2YjUYDVc677gcNlyKjUYB76yE2QDjWvO9GBRWKslaTl0\nnss8co5mglEKVDShLRQO2k1PNhwvjSiIO0vUiGzcmjb4I6I3pbvPjX/s8QXX\nsKCg16VJjZeyhxVzn1hAyiQuKbYYzEjnzQyaDZDiILg5X5eJK1+Xc1CNifQ/\nbgKAZvvUeGi+tryHgNE2cOQ2qiXHv3ZZjrXHUzgsLvVjGZCzG4n3oSVU1i0A\nqAh9su98LJL1wEs9F66Hrs24GLNchlsKwdBAgqh4CvakZCY63frddMCtciJ1\nWKinOE2e1GmnWFrkvGEVsE8O65gO103MXX0cUlZBoL5ojcRe+Y9vBSsJ1nZE\n66xH4c2xKS6kOYSY6QN7SontlUJeiy0l73GNJ8XKCHRRl6jmoWmhUoj+i3AG\nhmbY\r\n=015u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDp054fOfVtwZdygItmJMrbQ26daEMHl+TO8SRi41S/cAIgJ4zAbUVtarWUmE4tptYqxpLqvM7K9oky9eB4cxW3SQo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.20_1565041693301_0.2684891722341496"},"_hasShrinkwrap":false},"3.2.21":{"name":"ts-toolbelt","version":"3.2.21","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"5b8ea0bd94156bccd1b221e9ffc3745cae5d9670","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.21","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-+1B1wzQ/X4ijcGAWktvZAvrXqDG/7+oQtPOFuEVBqJv3UVbgiYtgQjqgXhQf5HnUoN7O/T47OMZbb7Yx5zwJwQ==","shasum":"03c7071704b88709215075608adbb2e0d2329620","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.21.tgz","fileCount":194,"unpackedSize":147711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSKTZCRA9TVsSAnZWagAAbkYP/1E+ureI/9kMByewOfT8\nXvz35KplUo0iJ/WA2rYymNEMh6wU38vOq80TMcfmhApQ0lZGfYa6NNskV35F\nQ6i3mWrndsezciCevvepSSCnLBcGNKcXkix1ulWUOQBTpVVzhFdfsVpMcItz\n/8Cd7GDNZjxfmdo6omKNpZbJ2yPh4RdFzU3UzEe/uNfQuIcFWuNPHWznTNHu\nawHj2zfaOVDyGuZIvoCOqX276YOSiDn83VtW3c7m83R72F6KcxlQ2W8LboG5\nuqrBRs2Nm/z1nE4wIjfc2FiHaknLd/TKk6cB8f8axspHFCtnWVyUl7l1cRRq\nkMY27u0HS9xhZYJbo1DF8YaKbZVDCndqFFW7oWcb9iAVFjCBvE5a6KjBd3NJ\nxWcjFvMq02GhRH/Bvx7z5kzWFIXpg9LyWDftQw9NfYDhJFu6wN5yXZAhPN13\np781Zu3piOrTqpq4kgN/9p7GNdqu6Lfh/v+V7pO4fPg89KM0DC3mUG/icvGR\niOWSFtaiio4XZfb9trJ2ialKrE9fZTORUwgn2IsjXnD2renFI/WI9eps3tVB\nFpVsoIgonJr2MQdrL5UblbCVTIU0r2UQZL8Z1Dk0VaM7KPlaehi1kpEVHN1P\nejvdEzSwq3vME3kMq1abKvaT0VrrKBHvNDSrr55LvoIt4dXScXi679Hx2m3G\nLos4\r\n=hKP4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBUBpyWe0P+w0IkMZiu2D0qZTqoTWTzjXOHlavJR4Z4dAiEA1wSPUZyvQwbH+rr4ksXnALNScEuz6qdrMqgJe/6AXLM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.21_1565041880356_0.8713820442826739"},"_hasShrinkwrap":false},"3.2.22":{"name":"ts-toolbelt","version":"3.2.22","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"49aed7b4f5ebf5c729e466c559765a31de277ef9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.22","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-sV3yT4dtxeDWqa7gw6mAcdCc8se1zmWmh15FlBCTSNCruRAtvquvfadpUZRbPJpIey2j0aTT5mF3fqIhF8G2Eg==","shasum":"9c30a97d9f7b283275981dadff67019099ee3928","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.22.tgz","fileCount":194,"unpackedSize":148131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSKheCRA9TVsSAnZWagAAcPgP/j3MAVaPHQOCCTcsAZ8V\n26p0PnH2mJ3C8f4vLOPWy3OiG9R8dtIELIfjsfE0R8iYnvecTljIVr43U+iQ\nUpuy51leai/r91R95DhjwO2ZnQAo49NhbdjQUKeQu5v8ZH0+iljOfFdGJH26\nsL79uZAa+Mm7eymmOxGk+89fSJ/nqCJ8+swks8tg7IxOdsClMmuF5xjAEjQf\n8Rp6jlrZfwc0JGkX1kRZyrQ6Izv5MzXbQuGL0HYSouboOIF78619opEtAq7k\nGBnHX6FMUmpTWnFyidqAXPzygvFIEBLiIhOQsmlojEuMarkkW6tWkpYU/eW+\nPX78Xds8UQ764Opk5WTUhgYcWRoEnSwVZVTYAu0QW7ulEObKgRnzH8M3bYjR\noi4cDxeIPldQC4sqPze1yNg/n5jTbbdcdrOlGEJL0tIMJ1pSPfoiCYbP9xeo\nnLUxQ3gXfdM90c0JmiySWkukLDoOBAycAPqtXX43MSSavnFbiVRYzxFykchk\ngD0+F/9GIRWqid5MXJvQit+ixjvHa5FhD/B8TZaVf2qZPTnbEDpHfK/C+6bu\nWe7OEJjr0R74wYlR2Ya+eR+YYTNm+CHX0JLSV6mS9CcfY1gkYXwDh8UzL1nr\nh3HEwzGUvZzANRbb2yMqeruH8btlgBIypwJ8mRinXdnXCdtSPegJs6RCeiHm\nq4Pm\r\n=nF7c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICUvfkQ8feloAxcp2mF+Vqwo452rprdThccCmaUmuC+EAiBqyownSZZXl+nfLkRFukr6K29/F0ZuAkx3u1qWJxXzNQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.22_1565042782022_0.6927236686795966"},"_hasShrinkwrap":false},"3.2.23":{"name":"ts-toolbelt","version":"3.2.23","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"742c52f6fb66fb860d2c994ec895a69394400567","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.23","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-WA0jP0SFchHWM+NrC2TaVC6AArt1/e01M7RddkiVyOpBtGvDVE7ZIZkUZ8Tpu2tB+zhAphToFdJhOry0p1lXbA==","shasum":"7b3ea621a7a58e0e4c1884b100695ca87189df38","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.23.tgz","fileCount":196,"unpackedSize":148640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSdgUCRA9TVsSAnZWagAAjAsP/1LHX3vRhDWWDZG273Kx\niXSq78vW//wix3UKYoC3PBIz4u8rGb1aZ326c7r3c3UiR079vbS7u4mRCMiI\nJxFrEVD21pS1V2JF/J6HFybhdYTDvhUTrbAZ3gnO+ZYkz61/YfE/l6GPKNga\nCJTTDWPNS83B11J4vGnmHe9ib6KWh/UmySPqBFmYCap7UJwbHn2yLk9kIODz\nsvTb+iBYmoZgqN6Oyjsu5uYK8pGbjvF9sv1+1J0TXrxUOV4H9bcxo/iV7XUg\n3F4RWg8BUVP6lqPt7kkMWd5ksvZ3ctPuXkh/cHFKpDKuow8O7cl0XbGaw/UD\n/TuKRPfAWIgNHQArbki8SvTtjC7zgCeR2kBDvfKU4oxAtjSlDZpLpvCjxRb9\naJnzOfsJzxquxRDSFiZ9VMvsaOt9BL9yvKzgqJRuLRj9AMpgAHyfEgu+4X2C\n6J8rmJq0MWzmL5f4OJ3leKkCWJwgGymDMcpF9tdH+TYbyu0yNGD+/Vmwq6o6\n4Baz7vqI40mGM0mPyaFWUSuk3VjKB+lBt3AgfOU8WtP5AMdgr7ZtF6SDj142\ncGa6GYDKUv/dTjyhSIcB53kbjLmGgYqNG00oLKwpeVkVQQw1MjoNbnOHNw5n\n65cWjfGXz7n5AGRDBR2NU+bpNK/rU409ALY9IsFxTq08fOUj39EIKfVYEJBo\nyHrP\r\n=UgKQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA2Ph1UOfKFaMhUu+svtzIPkuNkvd3xQICAz5c4srMb/AiEA9i9jBBNSzcCbiqpf+uiHTbEXQAI7WdQ+M4XNbX7kRKY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.23_1565120531809_0.6491614775242329"},"_hasShrinkwrap":false},"3.2.24":{"name":"ts-toolbelt","version":"3.2.24","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"ad83c88ce5c9cace4bf8c864637635e96f839448","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.2.24","_nodeVersion":"10.16.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-bBzpseWAp/db3JFbneBA0aG7xxC4iRLzeqyKKr0ee1l0XHNcTi7LtypmENWnPkqPOiUcm061mlcC+S1SgfYkkw==","shasum":"948fab52fab0f169bd0047e56f924760f8e6179a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.24.tgz","fileCount":194,"unpackedSize":149300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSzLLCRA9TVsSAnZWagAAEWkP/0lMfcviQ80C7R9zXZob\ni3Pf3t2MKFwnCHmr59yf5zW8lFsOVPrO+WvoUoINr6DukA1pimAZiEfuac32\n5qBlfNJ93+1maia75KxwXY95/dhlVPW/AaNxAfBAUBKIM3olkWiwuxUOanQZ\nGXWtcZQSo4nK4mbN9o4v0MmWCBP4Ak7f6zQu5VG7VFWOSI4d0HjnsfGgNB0Y\nNNw6PF4/PtQlzHkfh3DUbtRGRnrRV7e4RLMnkeSkIhpMZkw7Il63CFE4o3Fv\nTnOJpI+0SAuwR4K54Ni7J1w9/hQ8uvtHKUevHA0u3gBHHy2fEyT5GYEVY/cj\nbrKS0UDOAyPXctchTEw2mQRZRPjA9HaQDqUWiGYNiseptAjF87D0LT5XlLsp\nF/9Pux1p4JLUZ8CFQXmn1S5sz/By/v4lm7ZJUPWgbN1yqzPcjB/7QYEWZFWU\nUmE977Q1qKh972H2c9S1+sOFidUFeL1/KF9INEkxrdsdsz54qyd449vKmihG\nRRY+/Bz5A+/9mSkmIv3Is/JrOos4au3GMGHr8dcHA83LZYAB0Pw6T2gLQ5zV\n2Ca2SkSi3hymEnWXNw5d8YU5NOpJ5HGDsQjJASFKfuP8q0VN6QoKk7rk245q\nPNPYPn8lGlgGRM/SMwMxDE5XoSaH3Q5OjOLmcI5rPFYZ1w8d/HqhwLhjL3Kq\nu29m\r\n=Qukm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDS8L+OXR93/GG5wjVyj90Rr2/A/T+0xpup4d8m9kqbkQIgdluGR/iBQi9IqL2STvXmIBkBiCpT9ZB0TowzmSjXaEs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.2.24_1565209290897_0.7624971798682192"},"_hasShrinkwrap":false},"3.4.1":{"name":"ts-toolbelt","version":"3.4.1","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1997036bd1ebf8008b4865263a43105188aea180","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.4.1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ld517aAcHjHJoMZMA3jpRfny0f3UQHXvlTvt/RTOmokEjPByzNfpvtMaXgci19hNsjUiMwQqYAs6f6Bj8xN9Yg==","shasum":"0bc7fe5d5d5c5946cb4140df2d8a5d9495d38dad","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.4.1.tgz","fileCount":195,"unpackedSize":151896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTJCUCRA9TVsSAnZWagAA6cgP/ipLShEYwTda3oY8q21o\n1gUPsb1+lV0x3/LLV51HPh7Fly9IRpK37lMKU60LMyyhcc2hLWbk+ackZ+m5\nWNueLXfybfi873OSmFGRLsPaGO8Kx+b60ia00aIyFjsxvkqrHAQjHDXcQpvm\nXlFeZxGH4GQ6JEQxjkEbI2ufXgfeDdF99Ao/PSRkuDTy3plkCmc9iN2wyvEN\nvHD/voNK57M3uXh9AXrJTBjncchYwGFIvF3LvL2XPPehrzuEb2RJA76OSUM+\nyjrGJE1gk6Vk6VmqPXrs/BXd+hnspZkPmFNTi/bYMyCT/dTqb3SASrYJ2LJ3\nSSKcsw/3u+MpFzDk6qJGjmST6DO9d5jMerdYnzNUS8E3U6+ajxs4pLtHTzyL\n1Qj1FcTgkg2ZBQ7ioPIDKeBZkiYMuTQGeo2kTmYcLfT6iczQHI/6Cd7BuGuk\nu1Sew/76SDvum/qbsa2V/6a91oe84eyyfdRKUIXy81HegJL8AHWXVpPZPSHi\noiHCjCGMHrwqBBN9btS7mXf7mJRNXZ1Tvo/c1tdzLhVDq815aDYueJ+vRefm\nBQoYuO61d4v1EGUrJVAPrZuZc4R4oVRvS8PkDWTfcvkpKfxUkv0ZZO4oSKEa\nyEKKlaZkcJuoDkOgqGg8w3UZgdvuVF9C+Fl+VOemo602JYISdlo9EttLcyG6\nrc1S\r\n=pxJr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQpafRPYfexFlJ1FigASVw4KIrnSSyER+1UY4KS5tycQIhALvz8gC3O6CFEV9u6LJ72PcfkUuLEQ9YRhTsMqvXsv/w"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.4.1_1565298835587_0.9811248045235268"},"_hasShrinkwrap":false},"3.5.0":{"name":"ts-toolbelt","version":"3.5.0","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"0cdef2d20148c6469b61e5e07588ceb116628c2b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.5.0","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hBoqCMkxjz033Wtjv708OWdOo1Qo0gxoNrJKeyIyn/kQILjogVlZwDHOhBkWkMBb9tcXyaXGHHiSk/239i3iWA==","shasum":"b538aa86fc528b534668361eb23bbdf4c6b1867f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.5.0.tgz","fileCount":197,"unpackedSize":153428,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTLLICRA9TVsSAnZWagAAHbsP/2wSGtJVfN/+usmWnMT/\ntjUuct1tp5wWdE9V91EZrwhQS4OGh9sRiFM95TIYLHsdpP0HPHCVOODqcEHy\n64ODTK0TMWnBDR2LS+WqXlBACeEBKf8PsNDo/nolqjQa2wjXi8kXlpEFE60U\nIXA3GOQrSSaOrCHtl1ehcTV0k1hSFzqxUMTMenkt0T/XHevwYW3Y5r3CEH+t\nVEonnMySFuaUZOuhAii/OBGQuCB2EckB7pa+tl+zOOH4WCmxTjFVaEkrqfwP\nMyWcpxSFWy9iaUtckeR3aurZsAmpevWvLg0CBwzVcS7Y5IzIXijixtmoeg+L\nUixQOAYW/2tyBtgXzt+CpR7PKFef1pD+Zk3XU7JS10XKkaktzSuWEvWAO6cy\ntQRMmvwmQFFx8uO8YcPdY4ELyu9asWA+1jfl8ajzcxkB+XO1qC1kJb4mf17B\n0oN8RoVSyLvnyv8MiqUVoGfrcMR1BGUQLD7l3biGu3tjh0Fb4xc8MUMQuoQW\ns+DUh2d+XjOPmFW+5ENUUuVVTLZB28LD8nA04NRCxgevy82FDIm5HsZgfUiA\npqpx1/hjDlfsTceqAvXi3fy+4orxjbefDlvF+lsP3ymMHLgIaqxUITY3I8rD\nUa+9qr4hdA9nmL3SVeeXLPrR+YIz395BEFcG4JAWV8fxjArPJhERcXhFg0XF\n2isX\r\n=enwn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFREKLGxPE546HKH1zyuTrNIuhHgdr47c4WhZ0bKUgP+AiEA7TnyT237gitxOZA7L+qi272zRuvUtX96UbBFe1W9THg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.5.0_1565307591753_0.8994624153945083"},"_hasShrinkwrap":false},"3.5.1":{"name":"ts-toolbelt","version":"3.5.1","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"95124269ef67477f46921cc490825ac0991bcc41","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.5.1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RY+9Ru6saYLT5Mp7Pyf9FfjTP48fULOG/6CL+Z+DLqlw4Ev8sowIny0HVatCddO1+dCqBatwRgfB0goilVk2iQ==","shasum":"faf9e71be8e06c77ec1468196e40f37e557abcc4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.5.1.tgz","fileCount":197,"unpackedSize":153723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTWmBCRA9TVsSAnZWagAAhQ8P/jTbc8PIGZcpYYGLBnri\nsj0LSOTjPnMVYvXo7KIF1F665DG9BVTQIopibkStmkFLUtaA2NBiwueuEjgY\nJzl6ka16fZdvSN1TEprI753NcHXo3fqLfTtsK+phTSgCionmMq8+wYB9UlBl\nE7PJEAbWho7ddXRv0Wmr5YxYBwLqaO+1D/935Huh9z56xAAQakLG6Ks8l11F\nM+A4Ktg6l0MSW8TxwEaJKHa/cGJn5v0/J6txDp8a0M8iGBdlEtrPBXHgbKAR\nCfkNZHpYL1cjHb6SIZQQWCRRZIuKCsT+CCGYttqVH83u2jre5qKOo4syI0iU\nLlkHHtAFIay79XhuJXmY7uXnF3NiAGLrivD7cGcPrsCMNWvleNHzMyyQoLd5\nS9ZSpnPPCZXl8/o1AW/pzgAIDzkdnQzeU7OIHPcuvxcNAJgRCu+pKhtkUZvR\n22vQoTlqkk0v6k4wivqf3jmBWnSmsJpGoMQhCl6mNKc/5420hwVWIz4rgGAH\nHdS8Pgpc9oJNVJpSJ0QYT/gSc9J5k29ZeDdk5SRE60lwVLwsB9Biqw+W0hjd\n56qFBaQEY3A2DPBp8dP+sBRfydI9kxhuxeheumP12QsSQkcanb81emxAHCkp\n0FJw85bUwAXicb0b/l2hhUuKTAsvF+LRvgDXs+byJ9PM29+tSucJ1oj2wWwt\nPCBp\r\n=BcRS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGdDCdx8yfQdJehpn72s2Ahp5K66JRYCtxKdDnPek3G+AiBDb0dWef2lYYG5NTpZfhhN9kaQKK5Bgbv3wtAW5SqTtg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.5.1_1565354368310_0.7005822980157417"},"_hasShrinkwrap":false},"3.6.0":{"name":"ts-toolbelt","version":"3.6.0","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1e1ea2577c77c738d980708519f82afaa5ab096f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.6.0","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-B2dyPzX4RXqY++jP0PjenetOxlYqNCYzD4KO0rb32qqN3jF2EzuiTtiCx6sCXh5akyXjI5hmSAtjz2iuTQHOyg==","shasum":"0e37e613b760c5ca119be73a8c4f3ffcf5c810d5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.6.0.tgz","fileCount":198,"unpackedSize":156158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTs/vCRA9TVsSAnZWagAALbQP/RxcsM5J5c9f6ws8jE3S\n9N2NRVdZfaZ8DTXOmTMcIHgmbecAilAJ1erPRUi7oziwpsDoG30eayscnTli\nRDmo3yMHT7/3SLzYjCdrCZdQNeGXA0ao3oYnKMQlgm2cWn8rog0e+arRa2C0\nf4G7CdNNu0KbdRi1eM2PR8sGOEktZJ0rHNRVCm32ci+oT2/WOhTxXogDTT/U\nYaXEzU7CJhnje7h1+NVFI/JFM67mpl6MPfM7yfUxy0F9UWhuo7yeAl7qfkjN\n32RiCTINJ0P39mBqMMPC8mAgqaovIs9MfxK6e7qe4fAdwLaAkEHPG6MEuR6l\nN9FBYNEw1hf8a6fTfv5fL+RrmpNWcuExUgWwo0GBejtajWryQdi9D4RRE4GX\nQYNEiYzpjymXqOauB73aN/egyTpxrPqvbik9m1XBgrhAVpfER0HHgnlaPURl\nio4wgKELipgGY3LqpnZEKilYupp6s8++o8tsRa/LjfNveGBoaFf6zt5qMBeW\nJ3MkpzIKRWtHjygaq5ka02mE1ALbZTPbEGeGfVPSXR5edsyeiumpSZzFd4ac\nO2/JQhoD9rwzayKBUWbAYcjGMYLLNRzzQIpr7Bq6rr+QQFH2YHWnFB6avTQQ\n6g8LWZQo9k1hLWQ0sMfZHOVssqH/ESp9X3vGQb22qwEhycsw2bwWlZcrdfXh\nAmv1\r\n=hWfy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvf36tZO922l10KUl4A+u/hUExwp80R/koPw9lWayaiAiBP/Bw08SdeSD4Xjb1VPd6VkdRqxFYOonyayHG6vDU9Xw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.6.0_1565446126915_0.3245313779226706"},"_hasShrinkwrap":false},"3.6.1":{"name":"ts-toolbelt","version":"3.6.1","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"ecdf6dc220bd4fce46bf091eaa086993fdfbfd21","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.6.1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-W6L8ppD33zVGUYVQEC8Z812ZKoxXckeiQWc0/d2ofKrmTRueTAOjpVl7KIpo0LjiCPiMHPYJPS8mR3o6X0oVKg==","shasum":"ab7cc02e5e96dfc2de75daf7db264fdecd30e809","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.6.1.tgz","fileCount":198,"unpackedSize":156433,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTtNICRA9TVsSAnZWagAA9fMP/A5zL/l5zBhWcdNUBvg9\nblTWbYr34JglEqmlAXqRmVVfWzDjMfi2CZoNPbbHtyuOMVtllyGAXHE8D7kB\nkx2ujSnRjq6lFvXDBYCmUOhhvDbHkUuzU+4oTl7PglNWYlIs3DQ0VoI5jUPC\nVdR9YWjpZ2nL23ITcdLMn1uiRE4Syi1Qb81scMMn5M9zbTyR9tvK9ys83QHE\njorFfYa1RxitlXN5uG0nUv4dur64AFJa5mZSZuKYvhjjoq77KribHP/EDldO\nSmQIi1ZrDVMcCSj58bek1+C/RfniYHOwjUDaCGi3J5/Nx9iRvXyPjwAzJu6s\nVIi3CKIrnAl4jC8V4m1jRlHaFVmYpLKkShrMA0Y5dRde4PXwpjihfBbFPBcI\n4ncmdZxKN1QafCOb99AHjlXFtZpOV8/Ps0le/CpJNHmbOYlDSr2jzxTvWRua\n7GqwPZUhij/CgHkh2fmg8Wad+P0olhelVWyk39IKJCJW5zG/HGwwdbniE+Mg\nh7zhsVJ3L0XU1dbRl6GmQ3BdfI3dDZquyN3z/TbWN0mkYXblsmKXg7P/sjxe\nRR3bfrhWIBH3BIcSxPzDh/sVBsuFFknm2yI33Lyqy6kG2kOaTDWX0V3YDouJ\nJg2gxZKRK6r6//xe3ARF9JNcmeyW2MZu+BaRByF0CxQpSKmfWc4rJZFwZ9VZ\ndXeT\r\n=qEmA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCK7Zrp+E5DrlOmo2F+Oyw8ZtpNATm2kliZfMSisbJkJgIgQclMfvoLsZcY4ON+Xam/6Qe/PGvRmb7Rh7HqXdlRrGA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.6.1_1565446983807_0.2470551457678225"},"_hasShrinkwrap":false},"3.7.0":{"name":"ts-toolbelt","version":"3.7.0","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"22b8c75ac66c0d45fedd4b6617bdf806aa01c3dc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.7.0","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bZqz8yXRd7ITtgZqaBJucfRS85nPFyHNaoqtJP5B3UP/3V4tz+sfRuMdM3V0zJySB2n5ppqZUJXVEBVsF4MGZA==","shasum":"bdeaf48b1f3322f2afe48a3295d38dcf23b456d7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.7.0.tgz","fileCount":202,"unpackedSize":159249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUcbzCRA9TVsSAnZWagAAVPcP+wSB5WmUtmMXPvGAMTyn\n1vqiW/XTpg15mM+t92ad8f3RykC2Czm9IbishIgMjwcMcE41gVz7E6CZlQ97\nsBgv681fVzhtyW+DkJ3IXC3wOJCjYZgCH6cbRq6qaJcDLioMMeUtf5IQv8lY\n8J4lLXqjKWJnPPDD06NwTSmfKS8RnlhOIJe7G80lH/4wCDL2m8DiSxMrc2Gp\nWQEU3xIsGzSzMpSiHb4hgC5o2nry8Rfa9acvphptRGXybAL0jEJl/SGeSR1h\nzbOJWzqSi4SieJdPYWsBrZlQ/JV5Djs9Cp4hrP5xsc12NQm4Tk2GTzI7VoGQ\nbMKMXIaxxZjZghB6Y8gm5yX6yKtpZXgSYWUdu4xPZCwBNPdq/Dvfx/Ejto+M\n2ReohYnduz18/itfaEH9UghpO3/3feI/K12N6kZpujMQDy7jEhQ/4pudNLLQ\neXlNFNrHf5Hto3nfIEI3g8DPvT9sdMxUxlff6CvHETtZX4uPSPA45YnI5yvo\n3J8wQISL1azTQv+wPOCauIRUpIC6YqSdVnDfVmNJLPRDNlA4bmU6ocaN3kZt\nZAPC+mq6H4N4Jd89FSYorPTTNoacDV9lMDhRPb3YTohvZpovkOOt740E9XqF\n41eZdL9tshACnn95Cr4Al35tO2+J5+cMXJbSq918lMLPo2p9KehpMzp6Rbfa\nRyix\r\n=1tr/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBrrpj7FObAgwGEiK1SVdBBpK0lGaJZBjjSezPqh6mazAiBlkRpYj3uMcRSCAMt2AW/GdwJLDb4sTr5j9JSrO4SaGg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.7.0_1565640434439_0.016318924371096832"},"_hasShrinkwrap":false},"3.7.1":{"name":"ts-toolbelt","version":"3.7.1","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"21993626b7554623d96a4889eb85ce60e0fd75f6","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.7.1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rEIk3vYCAEQ1qvCvlYjfgNdAu5BIxRIcDSgJBEDsz5UR1/oKIJz7/I8yE8x1rPqs1o2A4deCuqVvuzdMk5JxiQ==","shasum":"b52dbf625069d7ecc1120d6e2ba558152428998e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.7.1.tgz","fileCount":202,"unpackedSize":159528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUdHACRA9TVsSAnZWagAAX/0P/j8+h0KRQeinFT2UCP3b\n+hoCJakZmkl8taVwofQusqKJbuY6qp3F+xg/lXOqh2NHg4f9N/x0TQhGbKnW\nD2M8tq9cdPbFJMcqdntLbQlauvjDxYX4jXEuMX5zJaFwfQ7AB6xKSXSN+57k\nqPpJ62V/sqMaIImPHEH7DXXmm6EaqnE+Pr1Xcmpv15S+sYMbyAZN1Gb5rNvL\nKZZ+odhX9YPWLIzXalIRP/ZBTXYx+Uudg4OjefHaZTXufnjGfW08K4jZOgZx\nRp7jJWaSX9pFDG0tYBhfRVouiaX5WyvfnS0dF7Ipi03aVci3bgZue8rQjfmx\niiHjHX6qZFphPQ3EThHZR0ZIEQSahCpvCXl+KbtgJvig4DQnP3luWFDKlv+l\nZMuuBPamcs1Y8+WSsq7Vjrz0OLhVbC8cVO4V23z3yX1yEw3N2HqhEQmJ1l0l\npdeRJXWBOzChhCrEItKfMr0WboGOLW0B89QTDciMzZekBmxrOU9R+LSdwA3J\nX48jRisA24Dfh3z4rRyeRvHD62azENW240pbQPaeGqFkqGTWPHaUKJ84qpUv\n15/+dIeuLLIUtzDXbY66rs3PzqfJt1O8mtnoT0ASrXws+Fgi+T2tIKDirz9U\nf+2a9NiEUj+fjCtdlfxn9FAzDosURFuG6fCvpAGka2mmPoRrsVO5WMUa6QvN\n+cJG\r\n=YYQj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHiR8BCRXdfwPCCQKNFzkP82WUdSDmCNHwtmekCnIKGAIgHcLCKl78vZwsZTrD8RakXQpeAJU2UavJeW1eTg42VB4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.7.1_1565643199859_0.9435231766111769"},"_hasShrinkwrap":false},"3.8.0":{"name":"ts-toolbelt","version":"3.8.0","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"f440ce06db98d98f678325b3c4b69f4451a75756","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Gjlx1VZR91Ll7FWT0vnJawC/RH6e4Uj7w6605QaIwC7djhkpR765ju1V+pZiejwjf3JFOzMJi78pZ0mfOzVjMg==","shasum":"bda726025341a5677d49be04fac536d82dfaaf61","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.0.tgz","fileCount":203,"unpackedSize":160758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVpyTCRA9TVsSAnZWagAAM1AP/Rvi9nL/jnFZMYlZn4nr\n4J9BGo1RSqgFO39n+TRxabm/AB+ajbVPd60akngOcU0g2Ql922Cch2J85jlJ\n1g66/kW/8jbYMoXCXTYD/YwncHeA4D/lTe4Sw2jH6eglEbJERqAqsxFnonDp\nE8nr//JBbEN4aaTa6dLxQt9D1S7K2oyImBRrN7n14Tq4qQefHovskz1O/S7R\n7atN2aDZM0T7Webufgvo+Bdj7LnkjvLyeOWf4mJcElobpzYKYqV6Q9TK30GI\nNX/GHfTHZTUMebV58GAaOEZNCOxZag0LQt6CLz+ECPAWjQWGeN0BooX/ddp9\nGlIf2073r/zMgq3dh+XUTU6uEU/zIsGR3fMtovqxPoM6kQOZYuMmddZLy96G\n3F/RqPqvWnGkrhZTCVsDpb5oEOq053fh9r5jErN7WNdby+1IcWIPcbuXvHui\njnaiaTVa0L8HhekUlQRl1m4+zBKTZFnekTPvVf5IWGJ+9pfPUtERuaAEjRcU\ns8yvH8NsoMG7+W5zTjpijpRn45VafvrnKsNeXD42tvvC4qJhulV7hRx1VeIM\nyh11W7PVIicZuJTyMSTayeVTwvmab/d8Z7oGSVuRBnej18YelM5ezDXHFJdW\n4dDqMgYeIXzqADt5NrNNTXXMT6Jh84ci2tI8gXZlVnSPhQ93WC6ydC83TrZ1\nz3VZ\r\n=8Ilx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIcUDEX6blOwNT/CRH718gn2lvSYLw7gcTxRsNkcy0VgIhAIEjDwERG1ShJjFKIthD+kwO+pCyKiJaePohjxIxBahI"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.0_1565957266358_0.32276735651464694"},"_hasShrinkwrap":false},"3.8.1":{"name":"ts-toolbelt","version":"3.8.1","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"cd4884aa0a6726fd9325d7cf8998b9b169d50baa","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.1","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-XDAWEHVscqto6pG0gPSbYaEfEBcl9V0JK5pQIQJ3M+6sYnxK5ZOPyyRA/aq78WxKlLvBSXCPJ1fPX+7qCCg2Zg==","shasum":"2f37d367e2d9755180faa743c0dc69bd7cab02f5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.1.tgz","fileCount":203,"unpackedSize":161172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWs3dCRA9TVsSAnZWagAAm0UP/jqGEhKLNyHbCxft4f0d\nuV07d/1VvEWfdjQUog8Lc3MflUQeOCM3fc/rIpk8/YKX0TrOaMY/HwOWWUmt\nTgBNtk731nnNg1z37wma9GftO0n2Il1DEpnr84cu6QF4SC8gm0yYNeAkexHF\ny9C7NcQEcvm8Tz2tRpxhQVwyllCf1xGEMH2ReJDDfVmFIsiwcxJDVNa9877e\nrtsQwyFHBhF734hY4VrtbM+KmzkDD16lx246GOHShL73mzNbVJPHKWQe9AVV\ndNDk0RcKRQ5s1iuaqps0Eca7TDPbHnQKLexVZ4c1LrsCFXyOkwookHYY+B1R\nBkGT/wh14fVGvDT7CSPl996zuVyvvC+NrdWs5Z68LtdmAHUbxrhQqgIZxhTu\nYrKl+OLJVhuNu3W4B69tvesVslJXfPO16KH3NN8m1qBQuxGnGJOnLw+ibUQd\nwtfi6DfEJVd+oEUsE4knaNfaxNXVWxbTR49HrRxHpIL8Og2iKZzZCSB4dJoX\nCYYyPU7BNucoJQ9xbQXFwBUbB9O1GrhT5jcIackWrYGACqOUtIILXa+Yx9Ks\nevNdZjcic6VPBSmUIjZ29YsvCCQAYpH8oXp8+MKoSSQ/eSOxMs0UbHhaY3tl\nwrIWzN1Hm/uCJSv086zsctmhDzkyrhClA76nPdL8GJ7/993ro0EF0V0/AAnI\nag0o\r\n=/1vE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnT3/QN74jMJGOXsaqFx0I1VGDba0QBF8mLYgDvQX7NAiEAiJSuGUa679/nB0pxyytga8RD+di7ioZz+5kq86crzc8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.1_1566232028986_0.8528517358393093"},"_hasShrinkwrap":false},"3.8.2":{"name":"ts-toolbelt","version":"3.8.2","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"80d2ab40bc2705ebd4d8ac5f85b48baaa384e7a8","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.2","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lYJ8p4X7Uyg8t8Y5MKmCa+VcgF+eXJQ2X2z7nWiq8+isX7YaOpmmeqfjh4bMolL9MAssfpP7rRgU/dte9Tflyw==","shasum":"204b33a6ec03e2584515e781357b76ccd93eed34","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.2.tgz","fileCount":203,"unpackedSize":161492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXAIsCRA9TVsSAnZWagAAF6oP/3P3dNBrM/4KiX62tMai\nhJO775bXTD5cPh9OOdpglf+YE5PIhToQq5+r5260DI9OrH0OJU7f4bzpjnxU\n5yEw0nhh6dlzf68zvEDckDRps6D8R0Zz8OzgZ1RoGIgb20iHS5KGarmBIa40\nqduyU5x0UgDOQEML4+HqQ5WOuO3N6Da6Huz6PeFe2VmW40YposoQnjX1TKj2\npFnjFwE/xYeQvCBlhJgQhao9vzXzSipN7VIoq/3NR8Feo5kK6/e5XRvZ2bTt\n4uCtxajU40w6rxmGW2RMmqgB0TqJaJHq/pij8uURek5QBY663WX2x6NXBjiV\nTZE3Cie+SHDL7HAPcT/w8sdSfNdl3GAioVexWuWfc7+wgxQsjHuqFl7r4Qmo\nhoxwB1VD9+5jH1nl9PR5I3aKN5UaUf6gPTpr5j3S53/QD3rjIUjj/oQoUMTO\nQgIY155gtFCyv2wkX7al1uP//t1eO4QOQO4gF00zfAICL35j/LbOI28sGJNg\nJhjxJRNVwzNkDOddlgFrdsuUxsWiIpxo/7EFvRrG22hkb+dofUzRCszvhnlR\nROmenatlMQuzZjhC6ZNEx3mDmCkIsT9S68KDWrMKH/3lWWxEeEvjeDiVstGN\nuYEDaWNur/JuucSYpRynMD6FnghIlSQFohcKUqVYITpiE7VqOB/CoGCZb6cL\nnit8\r\n=nyLZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDReOoG2ro3p2+m0JAldNalo+RFHt9M/cotNK9cQu3PoAIgSjii2Ded9sqGQZKBBdSAE3WX2coAmu/Y6N1kvdHNdIA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.2_1566310955392_0.37408771257175877"},"_hasShrinkwrap":false},"3.8.3":{"name":"ts-toolbelt","version":"3.8.3","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b86881154dca0ce6f04d9c51163e8e2f7d711dab","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.3","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/MnLA9Pr7ppDIxMf8sGSbNoiQDORQtzdcma8IsepArmikqZbu7CiwP+aAYaZnVXjOxLAleIEyxe20LJx0WgcCw==","shasum":"7f87689f0432932e9d8936582d78d1ba90a9b2d9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.3.tgz","fileCount":203,"unpackedSize":161818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXC5lCRA9TVsSAnZWagAA2ggP/3yOjmhzTC2JxpZDqbyP\nsgdMmrwWQmhg/um9i6+I85U3+WNQDuNlcnB/qI78pQ+7HI+CM6C4Lyqmqep+\nsR9RlBvYmWj2uBB0Qb0Kh62Udub3CBtiIIIeYwWyavgqLEm56OEDuBG8Mmzx\nnH9gVoIwED+5599btuQpv/JbMcSL8m/kuwF48TaD0oKQD49ZHkfSLQC0KvKS\nckBXu5WczcSgY8b3MnIuzZj67Bsql9JqFBS4G/YfF2xB+kxFiAGHegWb3jtJ\nM6BW1RT9lRmh6QseicBWXjEPxqGZ6NpNK6HpmOtcK7smVP7uJwnIzGjOVSkd\nVmUNuJYEFM7yehZxlb991KpOeI0S+oYVX7Upn2ea8enHiGoYmC0/rs20sWQC\np7PAJPpIcqN4l69CDKztPkfLwpobZbxnWULEyjjX7Jlg7LbJu/2tcUUGNddS\ny77pywHruG0BsOeOkUOP3fsON+SYAWeo8fa/x0J96wdbQoLrJ8AEgnVGHQdT\nkKDOVh3PrYOTLRS3hMrTeqE+kpstnqiVoyd5pQh/qfPyohE8D4vzneDNOC7m\nVHT4w4fOjqt1CkkqZQZdpZHeNTq11zF9nI+8peVdoqwHi674KmILeavfnlE6\ngJC0PNnyKQvQ78MqEIpI7BQE//PPLvBUDfkvksyfkPV49rOMv5XY28Anotnn\nIvEl\r\n=oJhQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA0fiycolJh4QMSem+5EIFWSSBqzvS6HwzN3TSzk/4Q4AiBKeoYlLNy4/WCzKIV26j3Ps9/3nNo7SdSJxJXkZh/9sw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.3_1566322276295_0.8359891086450353"},"_hasShrinkwrap":false},"3.8.4":{"name":"ts-toolbelt","version":"3.8.4","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b31bcd191444d677dbe554458ed459efcd724d7b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.4","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-JdM3qMor3jrJqtTDiOktBUsMG8GVwrN3NJA/cXlFWW7pcxwDRk0IATF5Co1hSykCphmVZ/aUWBdmhZvxgwBXhw==","shasum":"ada10a013693e5493b7febb72cbc7f29481ab3e3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.4.tgz","fileCount":203,"unpackedSize":163011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXvfpCRA9TVsSAnZWagAABlAQAKQOlJihMpzt9O7DaBea\nGssed69TUQzu9QnvRvpkSJ5zyIsAQTbhg4rtlFS7smFXbxiiWOPc7Y/cI7DS\nXYUZyJYr6JvUungF+Y1XElWaPkbR3jBCFbqy053ObkNndSuyLGmEmXpvs7qs\ncbm/4JXLuL6YwzAPxr10VKpCWh+4Drjp24Vf721YVtfDqQzsb9oDF+JPZAa3\n+8hCxYh5q1xOA/wKLn1TUdAe8amje+gBfrDR29b07hPg9/pfZN1BxNb3BLbV\nh7xsuXgLDdbZCiQFgqGOHBl5prCRLsEW0ftkVBbmUWvOf3T6+ie/sYP0V6iW\nI4CGrm7aXnjM1KZ1aLRt7UHS+JTE8lHzs3WlIVsztaynZFbd73T0cMVZjtMK\nkdGg4qcooHMZv6EHU3kawZRajUjvdpVQlOiPRAMsWsmVuiwsd6IzsqWBUDIW\nmHbxvlKgzpSWnjM9N3vQ++VyBwLJJx4B2kvFFH/GpT83ARJSWYv/i5U5vRbw\npzThCoSFZ9QGDq+hlRSK5IZOnIkQdOLFfnLjByMiN5wYYfwH8P6joPVuEI2a\nRew7KmYbAMuSMby13oIZtffdhInA1PPl0w7/ufDbvJrAGOQoHiJTHr+AFUVL\nqhppcTKf4hNkvhkSUeaXyMof5f9sT8QXIV5hd7jQiBS9d80G2kAaHKlsV1sk\nLTdI\r\n=GBLn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd+pFtpS3WjX+TmXQn4PWwRNWRMzRd24DHI4+OWU20oQIgG0+fS9lmwJ5vWEgasps3FBpWurZGbVzDK6Tf/16smK8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.4_1566504937085_0.8730363907249707"},"_hasShrinkwrap":false},"3.8.5":{"name":"ts-toolbelt","version":"3.8.5","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e1671f8133202990ebdb9252f2e6ac0e3cb1656e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.5","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sy0ctMZgzTWjV9UpyzaWbZHHnRJrsBaNXmT6K3q2zn9JHVGmQoUV9PtwIHnpBiqiIdpi2lc9e2uZfvWDiJKM0A==","shasum":"b2cac740ac9fed2de6dffcd01bb65e87944f00e6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.5.tgz","fileCount":203,"unpackedSize":162803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX/YPCRA9TVsSAnZWagAA8n8P/i2FoiEYxWYhuSNI8RkZ\nc16j47uWbdHgwPE+T0EDkJ06JtcNCZEgWZG4uI3jvOBu21O9EDXzYDOHhhNY\nEU5LTvA9wwWqQDdgigCNEwySQkauGP78YtfBQsG9ZwevDsS/Io0U1NwnLWAL\nHSnpKi7AxHKggbln0ata7bJNW5bAkKgK94AlbNYRjY2S3Cbaha5qbGLzkvRp\n1ubSDHVm0hABvkawTY8MC3PkVz4ZCUEIDrkYlqSoBtw8/h6hrnCY9vPtBMQX\nuV+5EcKOLwEqvOsmAwTqf0ENg1u89kApw7lay4gKTOYLYgCVGPlm6FNqtTWt\n10S95P9Ji7K5KXPd5L83oL9JceD5/h2YW8vTHOgzaFwyOfhNByXficjsdcav\npztB+vp31BgVldgag6y2Lv3N3c0/XRIs+acG4jv7UCtmQNgX2b3suzKIHWF3\nP+HRCiGkmVHgNxlJLQozyS5ql5RE/l/4FLk+jXK1qM17daXPVph/lx28BHlb\nZfou1+v6PEK6hqJMYkoSB+eJcxeoQi/4tobhWCgO68CmLr78QeUWG3hkTjVk\nAaEM1NDsOvBT7nfWGnl++/Ei0vOMUaWL8XEmCm62m12eabkHBwR3Pxgp7Cd2\noDFpKIRyKmFlp7qebxeTan1D11lpfqlimK4cpAq6izan+mG4MFMc3phYBGWv\n/X0H\r\n=AD6g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC44HSgRVEpufG0qwQm1lIKQWOr+KBJlZLbvMfiY9/ZUAIgYuOIfukNONDcstbvSc0d1p5PH0ZoAF472L0UcJfn00g="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.5_1566569998383_0.27971669079509986"},"_hasShrinkwrap":false},"3.8.9":{"name":"ts-toolbelt","version":"3.8.9","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"27e4faa15d7d906fff24429822d397c0c0f13ae5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.9","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/5rfW6AEvFg/y8T9SumA8/K1jO/YQT2U7VUSmlNyMzVhXk2ldQc2vlP6y3cuqg5mphjxE7z2Qz9Q4gH7OS4Iag==","shasum":"bae16afb044dfae951cb76caca7855e5587d5e7c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.9.tgz","fileCount":203,"unpackedSize":163471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX/vkCRA9TVsSAnZWagAA3S8P/3VliVkjV5r4LL1+KxtL\nTyPDL++KzfhKuwK8uu6f5IYZubxgKjL61uZXr2Ag8SsbugovH1mySmLY1Q74\n5Hqdg6b+q9sFXZQ57z+6c4fPus2b6iCmGl06mtO+5RXNsyegSHa5I8Ze+OK/\nC52YiljXVOReRn1i/2ccJ2r3oWdJwqqPIdHw3JzoK4U/IsgfRbrQzy6LKcs7\n22h8mOlswBLWpKRfzKij5d98ZsIqcqt4zca3T+Sjm9NcnTkU+bc6ba16ETsv\n/1SjBfzvgzjP8moOWby1E6KjvrGLikpPk03e1T9efjY+kyO3kZYsPIvglx+/\nPLyDBlVoIyECuO0iaHA2BkkZbMqm7YvP2EEuU/NO9KUSf7qSv102IoLtb/Xa\nj8XzN0/b7oltLW+AqykEUlN/HbzfuwEZ0S7ijmDlTxUtAQOEnw/vkprqeBL9\ngCgstamVZNZzBm1bGehT7WKl/qrzXyCRO9XClv/VsMBoJ2xCl/AIWNYHnDfc\n22KXxx3bpq4QKfjU8BeY0fjr+2xvI/3o9pV5223OTvwiV4CZrIcHiEtifW5v\nUba52zjwTvZlbSbXhFwgMgWhP4Af6o12QT6/3STzkTWofBQ2whZWY14XPj86\nRW2zfWoPvtb+FZ8U2qyUVIs7KzrJo8QYNZCEjtI2wZe8+QGG3fJXURTnj1Tt\nX2mc\r\n=jZ9j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfW0XNKXvcHU37xQ4cWwehornz2ft/GNOrjGAJBE/U+QIhAL7kndwAb2OAXYEgIjqDu5caDTXXJSe8ofHavuT+6WkO"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.9_1566571492204_0.12978441034366894"},"_hasShrinkwrap":false},"3.8.10":{"name":"ts-toolbelt","version":"3.8.10","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"5edbb73b689c98ee10bc04f59d013f18e90ec0c3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.10","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-mK2NSSbiJf3l5H00CvcwoEY2LoP/EKo1Vz6sQG2ygvmUzCv/a77osZoMk28AcB7HKsr1hR1DjE4QjodTi4sJZQ==","shasum":"5e310392ccbc11340c90769d38d168c18ab8fa0c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.10.tgz","fileCount":203,"unpackedSize":163266,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX/4YCRA9TVsSAnZWagAAobQP/0JHiwDysng5YjhEHtuw\nF3NV136NqozOlas9ioNzXs0wKkC2aperYQvklMasnYuDtL5j4nVkhXjPGU7t\nTEbxf4sW+ehSRxYB0oPZ4QMn3PhFAiDkrkDNjyf814WX9+jHfInCaccXiCO8\nYdHkcH/02R6JS+5iltHh1saex62kCGsP2d1CUYjw7/engv8bEpJcJ5wUQz+F\nlhA4qays+THjOwOu/TWQvOLO1mJlU8g0f15c+9xAfQI65mhENVQFWrnlzMc4\nzMg73UVRYUeJDvRyVMrfQOO1YB1PUASxnO7QdwL7UGPycbIsOCf9EDzApvKB\nn/7KssPkMZYdJDFFLJVnFU2XvnF0NvmzSb/zZSbjvsYN1dGe0OhZXg2B3/i4\nhLBSwzhqnqvm2o0Ve+H/izrI1iyMQVi9C5rs3MK0SI0Diis1R/Gw6aQBqGyU\nJoIqlvDnfWf/w94pMFHauvKoZyc3Yb+vHcaPP135u9oa8CMKwtLv6bi30sPp\ndusoCgVbZRALgNeU2X0Lm8ayKBFFvoqqXjkUItNODQD1m2MWZhaNfZEow+gN\nrZs08ZeQa3e7cDaMNZ+g7CY+HLJ+Cv0cJkCUNvXMId7AmtytzXtJ/qFuXpzN\nbZqRb68U+HkoRkA7iPgFwdusGd37knj/zmc7bCgQEPKVoSqZFjjx7IY8L7Ma\nWpad\r\n=IRcm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH+fnrxttUvBYnp7V883izd5ihqm/zoRYP7q7Vo754qiAiEA8nRBdiMwmPyCU6yQG/BAt3N4Bqlj0Jy/s03UDxCdvt4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.10_1566572056294_0.6661377654152225"},"_hasShrinkwrap":false},"3.8.11":{"name":"ts-toolbelt","version":"3.8.11","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"5650bb48a6ebd3b88dc52babe511af25d560da05","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.11","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-XCD3Oq6xxMTiSo1o0Tmak1ykPYzqwgDVjZuBNzGoTtzsqGOTy/uE47NNK7gedqi+RAYNqL/JLi8uqi8i5lWHPg==","shasum":"e43e557d47673aafdb26f3855041d3c354474ef4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.11.tgz","fileCount":203,"unpackedSize":163534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYAIVCRA9TVsSAnZWagAA5YoP/RBt7HYIZtGfrkqsCXpt\nXSlUOnyA8kiOcXT/9+tK1vj4EuI0pcJj2TrdQyHUNYeRYZajXgy7tJBYpmv+\n+cn0bqOf0rAfcTlwBQCUBa37hxld9nGCRX/ZsfIi/eXJkerxu+sjVnUZZxWb\nvcx63eHgRwoSFnPwW1KA0Qel5VusCOOwXWG6F4p0D81xIrCZE7OkCf5SYu3V\nXU/DDItk+CMvmeINOqurdsRfGAkj51NeFFo0VOlYZO7rXnhW3SZTxEx8tPDH\nOvjvDQegZg1kFRZuQ75+vOY6b3MKvbwYSa3ZbTpAIZSCPJW/LTPGCYOyDp3H\n3CAUScdZfvQKEv/Cqv3GHhGVzreuL6wuBgVUUL5phsM1NVV3OFqcZeiflk6I\npUhkCjHJBvbhyLccJ7sPfK54DuyGYJ2E3NFS9CslXLKVfNkJQCZPpTtlPqhJ\nmAQqqw5t1xwBilcAXx2oWVvHE6pNNnt+CFyLO2axSiL6WFvzWApL+8aZ/mpB\nPGxjVGqxTgnI+B6/GGaAsp5o8XMsPJTjKq0dT5DUt/0iuBix1NnoweutwOVf\njNgFCg/AtPY7wfd3I9jJJTehExRpJeWOLCKBVRQlqrqheSqy9a+XNFNO8w6o\nYkcyOxxW2Hn0f5zuMM3H4JK6n2IkZ48HpQICYKiND6fIKMlJJVRK89CzCpxz\n0iHZ\r\n=J9od\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHx7FgXmlhh/q8MF0HW6BKhrjUr5gUl30SLO0eIhnm3bAiEAl+zZ1NDaqvkq+xF6inuI7rKMHQyCyB3R5mNzPAR2NPk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.11_1566573076876_0.16654387953583583"},"_hasShrinkwrap":false},"3.8.12":{"name":"ts-toolbelt","version":"3.8.12","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"30cfecce124f2314312c9961632cc44911d6b43b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.12","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tL4DlpzrR/Dff6i5fyKZgnYR4hK5mozUxSAhDb1SfWBKo9U863VT67AQof3Co+61CPr5/JcXjBiQyC4UzlSQLw==","shasum":"c6da7be822c33d69b1f505a63a5904ecbc428a43","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.12.tgz","fileCount":203,"unpackedSize":163719,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYALRCRA9TVsSAnZWagAAn9cP/jKf53Z0nWMIf1lFgRqS\nCvFUnjA3ZuSJCgovTCfslixKzBpqBD4U3YuwZh9tCrQKNT3bhT121XsMMHjI\nNcdXG3OWZfQap1NWm2PJGJxmfmqepjh6gur7CLkl42FWAD4jSRV+Hvq0Atbr\nhzg2xxKgzzH1xv1J+qXDJjj14gGKtf8DGqMA2WRkD61xh7hr771eQ7PuKDLv\nsOJAXeZHwdKBbyOnS1cFwrY62rre2ddBh3LbX4my2nPKsjPklNNHO658r6lg\nQZsAOI1iwH8owKYhErSRzwt8/Pvx5VjkJzjACkZWeb3/dUYcd8jh3SZtSfzJ\n+W5HW7tr13Vvc3rsKym7nEEhpYrnfYOBGJhBiD0GCTYQeuF/VhCNeqAT0EAu\nlXxo7f9fYoST2UWM7sv38hN3vtvLHdvTLDGiJizxsD6m3M5v3ofbOJJ/Ujez\nT8wn2mPh4r+u/Du5lyPrLBXe89btPY+xAJ8Ep3nWswgZe+syjbKRH0iSFQmj\nJjnfvEAFLTOE7iqNErJjOM/KqMWQh8+bo/kwlmqFEfOj1htePGxHKyX1Fv4h\nkbTy52keZ/2rrtWgxo8QrW1WFbH6IpLNlkyVUxHGyfUF3J0NrCvD50WNeshC\nBbuwdGXJ3V5sEXGHYh8WZEw5CGg61EXtxuxpppLhwx1fo8Z43vpdPx+q9QUZ\n5pYQ\r\n=WcjZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyrBJklV2PeX4crm82W8CtynCPqXfTEn9c7qjKomBG4QIhAMhLvWSmaxmdutbNi/zRp2wx8SmEBEnyYjjdBbf/JEVl"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.12_1566573264763_0.6450277652992464"},"_hasShrinkwrap":false},"3.8.16":{"name":"ts-toolbelt","version":"3.8.16","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"21160ecb0fa251c9370c7ec65666213b8efd5ad1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.16","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bMymH0SWHbReBzXtsfILYPemRpxzY6hANCI0toxMYz3VizXKesru2+5SS2wDenkSPMkehSm8DiMay+KxzRXX1A==","shasum":"f839a8fec26cf882e8586034aeb78a5a766a01b4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.16.tgz","fileCount":203,"unpackedSize":164431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYAeRCRA9TVsSAnZWagAAR7YP/3Puq5P/zm9ceYIoCO+Q\nvXFsiS6/8K7KQmSGzmrqJTbPDC2lbA+ZG6IydvoiaHhw4OghwWgJLaE4lJvd\ntHdTfv+75vWzkOYFYTb5U9zo55DG3l1ePbQre8ebPKnZvkm5251HksCHPS9R\nfn3nq3KiDJgToUbMfzYWY3tZIsdL8qQCWxLzgFNbJzaAEU68fbicsqS6bEZW\nhJXPS+xx4qAHbNt4PJZZw8XgO/icJrKwiuC1cxki0Gpv6bkLmutOg0gl1F5f\nppHQ6qYgl9Dqkoa0Ra4++kkP7VemZORtb9wMZHvNUhiGvZ+IEuAosysbzbTV\n9b52gnFrLMUn5m2MR+ysdRxmk5YsIsO4ja6y9h4+Gw0WiB+97Ngjd336/q3o\nHvjQ+JmIXeI/jNR+/T70rRimlCrG7jzFvQKtw9M38NJnJZN0+YJpDFfbbpUJ\nxDUzzFmbk3Vr2fFqLh0AaMW1BO/vzlKCp1eaNRaKGd6VS7Pm0bs3pbfZ53+X\ncRNZhjGq+mvK5QSSfJN01LCYjGLtSzPpQRXWkl5dzsCslXWeWVlGYXZ8qgNZ\neTnb0nParH0DJ2zueqR2iy92u+xjqpfvKY/P4vELS+fPFXeDjzOLEH77Ksg5\n1SK8z38o/bM21/LNgN0mYCabKbrTQ9qoONXb4xyc5tuarYUC5RARGzfPXrP/\nx6dC\r\n=HDGl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9F9yfzduBLHdo89YzsIxe0Z5dQgE0YcsVoruT1WFAYAIgav+TBH6kvk2YMdkAsOlQJCpifcg5NutA01wTgVWdeio="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.16_1566574480543_0.7653637192765894"},"_hasShrinkwrap":false},"3.8.18":{"name":"ts-toolbelt","version":"3.8.18","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"cbb15a99511feee53f8c353c3698df76a1829707","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.18","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TM+7W4TSfh3li+Bfn1mBMMXvWKfKkK6LbBhlVJoWWLTWjJUUUcN9VcqD2lAGHpA28yDk3K32yCvbu1rUyIRduA==","shasum":"cd4b0791d330143599fdcc4ceb9d7231c71bbce5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.18.tgz","fileCount":203,"unpackedSize":164395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYBZeCRA9TVsSAnZWagAAiHAP/RZrs+BkuAFR4Da4rUfr\nymt8hunq+pamfqEfUlh1AOVN+d0r1UMaUjOE6tRtTSxl59YOI7z+TsbUzUkM\nelqLqKPuLccdFjwdUzLtSPNBEcE7RGsFFBFR0qVC5bcsHV4Xmm+GSHaZdZNd\n1X+CFdfaTxhuRdly3Q89u92LUi3GUG2YCZBb9sJwETsohKtkbqQYI+9D4bBN\ne0YW/lqoesaBye8z5q6cNweFv/Ijud0rv3DjSrcW8qv0BU1tOm0sk8U7AVyP\nggvVRUGf9HHhiHgHJv8jUk25bA/TxJdX3B/KHaGyqZHgRCR8L4ERO6W22uKx\nffauWBqrQM8LiAdtZvsey56umb7hjH/8f6KrOIxxw74HKiZDc717fqee3VqH\nfJ+JUOE6ZcBw0XiIZwtpPTr/OQaTOLt/LCfQv2abWnLKn21bo19CcpVx/0YS\nGk23eiVVTfw8gS4ziN2Ci10PHzC1IKA9+jDpAQ8L+dEGsBoQh/zEkLiABVTC\nICLTHb5RJOrlPtTIXGjtkA+XoET2l+sDFraCYtC6cXTN9r5a13SAyoKWzlRU\nvt7f3SJoFA42gGEUfgMg35luA8TcuxHEiIxezcT8SO0bz98vP3BVEX9ndI5W\nHVKjAsbJy8kplcjTp1hBNV5/NQI98DfqvjJ+S2YvISR8pf8odmlyS8xFWPkB\nHZYM\r\n=nBu+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9+p3F0zrykpNV/Wfy1XN3UzmiEy1uOduV7v6RdQHOUwIhALFtCVyfV3aYd1tHIHhDy7QBLnKwjJILV/ORUNW8Ujll"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.18_1566578269685_0.07416458159434702"},"_hasShrinkwrap":false},"3.8.19":{"name":"ts-toolbelt","version":"3.8.19","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","gitHead":"2c8e1b8674db16e667f6392c221baccb8d6e20f3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.19","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-pwJiyYD8ewCvT3XgEwHpBFWbLMSepTx1cjL4U5oOqBHEYbK6Pl9Agi/ythFzlNJsOrVf4+kgseRpzagHYwF/mg==","shasum":"8c6441552b54e4560f7a88c182b8d43f676dcaa0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.19.tgz","fileCount":203,"unpackedSize":164662,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYBiHCRA9TVsSAnZWagAASLkP/0rlTFAWX0eDRBtkPCGJ\nb3fH8YMa6rIU+/kgpUdzMifd/iUu+DvyJl//kHZkwKxFvPnVWld8nmrpBThg\nH9Idnf7/SXqtCl+Lo7cjyMYKaYPRV0bVTIHYeKuVxNbV+DCig2U99ZTKEc+b\n20fcZlk1/Nc1oHAGaXzj4GFc3Qgsnj7SKZYOAmQj3elJMZPPQKxeq3XHsM1X\ngI9EzhwYwpvxX8ZustowGUb2xWhSUD1fCUTvDnCUtzv+3RsYuoYlKTj2JZay\no3pnZSiOVs8AqkwlwC7MM+dCUOvCLJlnqt5nzJotdvqq7S/yOtdWEZuV2Rw5\n7b5yGvDCvgh6a9ymuYoKaGZ/urv7zSnUovH4fCGAhdQfsfCZcpm8bzKUJOIu\nKUoaYG5qLKfpoiJ19ZflbZkrxxpzHpNZfISQeG3k7IAmqUQj0ZmjSkLYZorL\n2/zHqbdBIaU76kNl3Q6I2j6Glfb/srLk14k/YRSKyAFbZPrq3dQ+RqIKLCYG\nTTgXnMPpdDvxbWfRUeATaLewd1Oza0TutBs4lV7Q9vPHqhOzYbdWfJ+cm46s\n1LJukeZbCkswFtAzP3qWB7m3+hHdiS8d9T038bPi3TsRFszdRDmSYncSaUxD\nsWoHriKatnlwE/DmNp1Qbs4xcECdJ1KigzxUfba2fB5l8CFdZQWRHev9rznc\nz6+x\r\n=nW6J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2qeFx9yWxcY6d9QJPooG+86Nyp7G/3q7arEofAy1yRQIhANpeCU+YShcuKKldG70nyy92IHCAlOFeA/eZJDFrAKEk"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.19_1566578822466_0.8239172036975331"},"_hasShrinkwrap":false},"3.8.22":{"name":"ts-toolbelt","version":"3.8.22","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"0cf0f48d71b4a17da3785cbc49f0ee81a921029b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.22","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-E7eTgryH3ihXUUtyZI9SAY1HvQQJzwtXodFTZESXvpxdPTgcoVSkqNBDMv9DBDk4l0nxmZAqFKAFATTIMRn9vA==","shasum":"af98e2dab38947147bebdfd96f56b1a8899f17a5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.22.tgz","fileCount":4,"unpackedSize":44159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYCOICRA9TVsSAnZWagAAWyoP/RfqBDb/e7396M03YzSv\nzxZaOCGCBqG9TZgI7Se/cnRnJK8DZ4rddDOpTRsaSf8LCQD4K+Y6CTX0bl68\nzDLUokWC2D7USCU72n3sen1YNJ57o4vuNoq6/sK1R8sdjGNQmZNWuEgIXndl\n+llx9+7vcTxLKti+0E40ck5T9017KE7/OjEoQFuYV+bUgIQCGWEM2NEHwmS6\nYoaDpBC7bmfUlnyilqiLFY5eoKjdkusJkuNA+pWbOqjfSaQ6lOPP+qmk/MeE\nx0MirpVTKcwx4RZPZo6H1opLQ4DkhShKuh014XSwdFI3wEwAlKsaMImDNowo\nEuNOGr6VVRCYpMPmS2420GpK36oUf3y0TeHZaoh/B797SNuwg3x9RdsZdvGu\nGbEWNSiQtFrOcdkutD/V8dNhCKK4j3b3UHoqrMGZDV2um+8vJpz2yYLT3OQZ\nKHLGvRyuz1mbcv6R/Wlxn0oJMz34+CPufViIC0Y7Dv9iczD69bJxtyC8L+fa\nYxdlxWtHoRto1U/7uJGUNV/bTzVX1+ilwCI2WAfPJfuaENoEpapMZX09emdv\nyitgBTbBB3zVPrloKx5QwjAn/uoRztv7QoPXgakS2fYSMbx2qvhtR0ml2NyV\nYYf344j/WM4HbfNZwPB5YrraTvSq9YV63cCrOQ5AN4sH9DPug19ZZzP5Wbkx\nmdQQ\r\n=uYG2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDn4fOBdRWJTHJyE5rRqsGSH7PF4vENhzeg79LycXbZqAIhAJ/uVip+bD/tjkbii65NExloa/uPvtmI9DDFbXlagOFW"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.22_1566581639776_0.021629244016802662"},"_hasShrinkwrap":false},"3.8.23":{"name":"ts-toolbelt","version":"3.8.23","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b3cd4e3db81dfa7d405d0bf506e0f20234f0c2bf","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.23","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-dTFXMqP6WiQ0vDJVxfZHU4hxIu5UvjAFeppFBWF6S2rGufIuXlO7bsKQHy5chg0xMxsSY8IjGdoj5yNsZNUJbA==","shasum":"1d7b945a4bcb109592c7940afc8e19250a64fc5c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.23.tgz","fileCount":4,"unpackedSize":44436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYCTHCRA9TVsSAnZWagAAR5UP/2ifXUMxPiITVQduul0k\nBYLh6YYoOEbo/gTg0jhhprTTjtd94P4kM9NTJIT/FqZII6Q2uMsAX6oHUx7u\nlGfkejYzzxv9sGmcZVAvgaKVJ6kfWVUSRBNj4uCbnak7/3yz60swucP+lwzm\nvtNXpjSXZijlQwNOVyeoO1cXfoa62ONCdgCbo7+46G/R5nzZ5poF1Fe+Sm7J\npxlXfmgH2/8KPd5cLdAIwIBsStxATCURCwWGK/0wRsrFNZJq1Rwyp8ZXICzz\n9oOBd4B1CbDwQ6ftp5L+jLwT4ry21FI2OdnYe9NRtEILxBCyP+NWuh3uM7j/\na0bZ3F0YMltoh7GN0C2mO0NNyrkw1zKNG+vaYQCHXYwYcBB58JGKjKH5fkUO\ne9xWYK8RS2JaEnxMMkG33eioqiSYhYQseflTUJoUSSmC1KZWElPfos7KzdHn\n2ow4/BacaSbzt98NmFspnhCpzQSeA3eF0DvaBc55vZQDuEDfVigDHYGoO3be\nMU03l7ClPjZUodeM7e6hAp8CIGJdQgU7tYMt8Aq2XgFLf3aAuripMh+vC1n9\nGfIYJihYybTjWnuhj7NZGAPOXBLivKqy5Pi/6hEAUn/fm36A+r/hyrtsnMZt\n2LnTYSuJDeCEsZ7PCZ889gjmGxyk6XnCfebY5bLBIOo1Fd9wuDOeNWk9GTGC\nP+lX\r\n=KGXs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDG4uKZq7f6Jz6Rft1gIuQdTMYiv77UlDNgTC+lloCuRwIhANdJ/dj4imuBy1G77gzIO8vgA28txc4u+yiwO1FWIxCL"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.23_1566581958747_0.4718383958550747"},"_hasShrinkwrap":false},"3.8.24":{"name":"ts-toolbelt","version":"3.8.24","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b6ba9bd96cf9df34506722c6ae59b081f665d8e8","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.24","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-x5E7Ensg+FJQi9VbdH7/5rVn76IUZaTYJh2SaKpjSvd9IGfcFgPlrkUfDCFxVXhD+wgMwls7eC90qdWmE665Pw==","shasum":"79a6db34cc009945a3a270f28f97aa0632e3f7b9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.24.tgz","fileCount":4,"unpackedSize":44717,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYCaSCRA9TVsSAnZWagAAcboQAJsmH82QGI4MFIHABhJn\nJbAlD5DCgLy73tZAgD6jZTH8orqQ0KMyiJ0HIo7+fOhfD7IDcLROg9Y+3M5g\nqfyBn3mwdfTjDNXUXtHLwbpZhOlz7/BEwbgNqqBT6xlmSzCjr8OkXdIT+2pI\ne03CLUCkrKrbJcC2ZSLp+x6F0Wpz2JUP+GplW5X1Uszkk8vR+P3OLgYdRC7O\nCf980a58EL+Qzx723xzZA0XK7vae+qEEQGZtED3RmHZY2+qwuafxV1PJJCjm\nKlk2vEa6ZiWDGttrlYbiHMjuVjFdDPoHkRRkidYdxvvhwnAmaivbGrJZHcWR\n139BZm8l6G1QfODHW96/iZAwlZvwAIrggQkJLRDoUPmjjWMjCuxg8g03KyM+\nMfUy1mLJBHnxePUOh7Ipf+j9cWlr2B0C/7mZoHx1KE71d4vmrflynbadWeco\nZo6eklRX00QGaolOIlm+QM9ZIBCqwMKWLT3VE8u1IwGMK7IRUwOlFV6GKdAu\niNYe0qMjBMmqho5ma9X3dSjPUAgdniPYRnw5UnlxFbGN4LOb9exDVAuYqokb\nobfXeKLmMl9zEed7iAfGR6ZNIk8LNLWeGDH/vHGLLcoaRyqAXIahc5UScUlg\nXfkhKR5U5gnqbkBPHPgD6dJ55gbaxulI3Q17OPiM9jLCc2OD0ZwtFgh10kIF\no9Xi\r\n=n4A8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTC/+QElLtItJ171nRFNn1ZvgRS6RUy3WRR9ok2WGzdgIgPxmWgnyzUBvWkhjgPEHcdizcpMfXZLlh3YDoipaBfQ0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.24_1566582417376_0.4602893129807357"},"_hasShrinkwrap":false},"3.8.31":{"name":"ts-toolbelt","version":"3.8.31","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"5f9c97259cffd355cc6e5b612b74eab61179dfc2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.31","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-XNqJR6rEPBdscz13BeNPiPGM3mzSGJRy/5cSObM7Si7CSGgahJksOlnzxQAtcPWBi99abSGj/IExZqLdIk4m+Q==","shasum":"bcebcc6ed26a933685924bedf15ae3268b76c711","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.31.tgz","fileCount":4,"unpackedSize":45492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYFf5CRA9TVsSAnZWagAAdYoP/3zKRKXPV89ntlEvrdej\nRYdn66kpWrHCS19KNJdEjIOoez+5xO6ycCD1Jr7Qp/mzEuqrCkTSOwq/3Eeq\nnEjhfttwGDOgNG8mfChO6Q08l+pQkqz9rehuvPHqXTAoMX1pSrchdgY7TsZh\nMMFtBziVSDD97EuHzTPhdgUH8JJreMpnfcKVJBZvn0kEJ5LFWKHHLY4G1dMk\nTnrSgwl8cOB+eKX2OFZWGR0kXnRaB2Dtg2Kbt1f1F0TqJbmKjNzD20xFGzqw\nFQ54pHV4cQAAcFNn5/svH4+e3dMHZEFpsmEBgCY22sWUlgZW7i908QUiLmrz\nW9moXJZv0cz33WZy4waPGej3U8aiv541gg6oYoiKtDW7u1ghGTED+Zw5EJCZ\nS3mtegJ1W/lfiUh7WcfwcEaJzuCgvBgbm0LEJ6KgxLJO3DLgcuOrkWjerKc/\nbqwUaewDVwyJNdCIx0pM5JeerA+o7gi2J+kHs0lkbdNXNdTTMAes8nPSlP12\nziUJkpFtRPvQD6ywKp51629yZJOhpVq9D/sZrvFooP2NnY/c7GxcnnLeAfH2\nctQ+UZuKwTFyCup2TACXhptAE13JxAsk9R1ksRORLfvQTlzugPe0zwOoIumM\n2MqJCNhRwkE/1utB03aLUaC6e91uA+pGBwc5Oa416f5xswAwXtOb1sOkw41N\nKSt+\r\n=e6tr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBHWah+VncNSXVOkend9FV7R2c9dyXfZg3atIqdd0GY/AiEA4aAOms6laYyUr/c9OVdax33Dj7FpZnn5R7rKJM28N6k="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.31_1566595064401_0.4893376668145464"},"_hasShrinkwrap":false},"3.8.32":{"name":"ts-toolbelt","version":"3.8.32","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:types":"bash scr/build:types.sh","docs":"bash scr/docs.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"544f4a0abd86949e615145c2b55a8d7625e85eb4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.32","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-r8uej/yEFxkaHM/T630p5/QbY96kIeU93ayQIzBJ/zuYNFBo4zjO91raw/6jKsId123qfUk2vHHXzjZcaTORiQ==","shasum":"db0703c74c1ebb932320062e2898e309f190f8e5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.32.tgz","fileCount":203,"unpackedSize":167366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYFvVCRA9TVsSAnZWagAAASsP/icGy/8ULvBX6JaBaZFr\nmKfg7inq2472KEJoZZ3N1s1OAufE0r7MmRP/p6rGdAYOsgDTRfG2Kc9Rq3b/\ng/WHAK2MWw/0TC3hlQKF6Ep45MKSqBcW1dNuspiOCzWi4hznjAjw5ouOVxAY\nP8kklI2PtEA+Sso8dhQQrdFhWweE0h1LJ1EzvX2hksnf9RyO3oOe0pR8niUr\nifuWlSxsA1puHI5/Ay4+eEA/BLzrhPXmP8+cJP1UaGXpRdQ8WtcUoYD8y66S\nE5tMjBRbKdyJRMmUDbqn/N2JLjYGmyMDC17sXs+ZGvAH1X77CVcB+WkDQVNr\nA4l3u6TNOPSLF0ieudOqjgIU2YkYZ1b89tStxcdxkhU/ML7if0FDmegUy44k\ngwDPb9OyMiHwYrfbzbP3MSqW5d2A3XKr8ytgSp/qAV3AIQYd5COXyAsf9aS/\nL/kGw+z7aCqT2kSiLDoRkF63O0IsMksX8FoQ5GK0PimKKUHA5XLcKkndqzE/\ntALhQXieOIeV8JTTerNZGJR/7x+QjWXZIhGIufzOJHwmuRjUx7fFxvt4uStW\nl5Ue+uIzAXd6hEaYi7hf//M3wzwro0s3NrRiMWvOQC1aWVL3IVryuNxkh/vi\nCwh6xjN1yZp4pTTBtnSBGSoHooL9eCN7MyJdhm8dRXwW1Wc6zhwmRMYoy5XL\nGRxE\r\n=jzD3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCicxNGK6DpdyuauHAlqvEa4UYVXJ/nkwvrr4AEJJoPnAIhAIejilWcvnhwNP2lkjQH945Vm6cdca6QtyK0TVimpZcD"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.32_1566596052408_0.15426438195329295"},"_hasShrinkwrap":false},"3.8.34":{"name":"ts-toolbelt","version":"3.8.34","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:types":"bash scr/build:types.sh","docs":"bash scr/docs.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"dbfd642951b4571763959d0dd05c8385ba05fd43","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.34","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-JPDios9g17YgRmLlCGaeCVD/X3ifDvTB7TZR0Zg9ev0xcVMcWr7WHr3e7CUXrVCfVN9M+RUYQMz1QUXxctie1g==","shasum":"ec551c367c77013f274a899c617a25a272c5d73c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.34.tgz","fileCount":202,"unpackedSize":168680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYGFqCRA9TVsSAnZWagAAOD4P/AuJ2c7rWX4VqZKyfgTP\nF2KrYdy0ckt25y1GWl+tdHbidiKavIKtaZHtT5+9sMT6L7Eh6qxYsYB+ENfD\nKUjRlJgJBdGV2722KlBpkY14B2WGI/egILAZRIoNdC4GIRhVCoNNZu/3Xu1I\n4w7UUAgFTQv2QF5epd29SB+256XBlfG3puemJI+QxwsT1F3B6D9OEdKmHwNJ\n8dOkklid+xevIut2jQAByVARnxSmvrNiYtsMuZc8zo41sYFniiezPkMGPs9e\nWerpvjI7XmP8FIoqwjyBQeo/88p9JA6dc184X798+FUYHYLjVPIgWtJm7e1g\ntq6UPvLf8GzktQclWQehi/Py3U1v/cdfY9XTzQ9uI45pBZFH8UpJDjLUzMke\nKX8+niMHnBGCpEel+vYwKMV8m4fw0iilVEDzDiSIugeFYJziqO6uzE7X4i/G\nLFKV7tzsTM+EpW1oIrjZ9fWtU/pglH1df9bCFMDR5WkS7jlcy3z7MrJvL9tb\ngV/wYgCLQJdQbs6jzfpf8uFQNt7nehfw8n5mfJKLI6o/13mj5jvQich5SpOr\nWrIL302+2h6u6NwEe0XeSHh66DSDiM//RPnvE4b+PXxlXhdW5mhWVPGaRokP\nIhjQmvxTLOrkH5Dnz+dJJGI6zOEH6t15gTqugkonVz4jSpFbQCWqMPwEaq3a\n4J3K\r\n=WyVg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkiE2q9/vf8RZ5I5Smo6zDCypWcIHEESnv8sK8bYuPIAiEAwx56R2a59s454wRJule0MYaRbtnpZihNFLHSZdQ8ZoI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.34_1566597481928_0.3337678566529898"},"_hasShrinkwrap":false},"3.8.35":{"name":"ts-toolbelt","version":"3.8.35","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:types":"bash scr/build:types.sh","docs":"bash scr/docs.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"d9aa9dd0c1206a8934a9cd2501dcdb0a89496af2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.35","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-FaZadkZYj97HROo7VD/IrzAgiU8aQYmx5US8tYGkVOfjmhkzPc+XEUdOLSvCyob+agNYpRaw7jUGvpzPw/kb/g==","shasum":"3fd770093c18e3dd96b8e740e71c082d4588d3fc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.35.tgz","fileCount":202,"unpackedSize":169356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYG3GCRA9TVsSAnZWagAARK8QAIXqzi8BpC0fv+wxCG+u\nZKP0R88XlVkQvuNOsqC7qn2a9dmq33eWUM1yllduAUa9x8k7+YDIAIwzP6TB\nIP+BaRxlpvS6H0xaXoliPinLhh0EUB48pn0DbN/KdYd6+vFCnD/jUbIszQkA\nZurTeZ3Gf6s4glsqR7s5IzYXyFv9LtSKi/Qi2FAE0pF2a7LUZwE5qnSAY2mb\n3juImzDt56y0qUIDkomWuqJl0qCewHl47veGDvUdOLjZ72pFz+Z5AyHr0lih\nC71gihaN7t8uc95dv0vGlwZ/PVCBxrJg8Z2QfdE0MHuemLxlXYYB/NHLFeY1\nujFacIGHZeE9pWv7i4nSk8FQQQe7SLBcJ3bEBjewOji/iHmdxG7HmAg5FsQH\nf4BEFRpIgtpbuYZ7RYgwqkcfYngFPhwx5lK+I+g75fOvqMxuMypioFh2Lfi4\nQufBCEd+Xs+YbmrB10SSga234LwyFOGvkr2oBc+tPqUXL7Z41dmbZL6HjgaH\n1qf86reLs8zmF8BrQqiIHIJMb+jKBQJUxjkpMq7cZ0sgX0RYfKGdBawuc0QF\nWtZdGJOlDAeVJVCfPXlcV6jUAl9EB8wOSmssUet1QDGlk8Man+6oV+GBC+Sf\nk4pvhrDku9HDX8TmF9885SwomcEVnYbShed80OpBUJ0n4kHlupliFrQM4Elj\nsBIT\r\n=2y0k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICC9kOEmgcTghafkZbnxx11cV2RZI+HWk90LZ/RLfgbhAiAGfVp7QRvaj9T7lhBO0lzwPxfSlvZOJ7gZIjquv1tT2Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.35_1566600645783_0.27264484864833816"},"_hasShrinkwrap":false},"3.8.36":{"name":"ts-toolbelt","version":"3.8.36","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:types":"bash scr/build:types.sh","docs":"bash scr/docs.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"99a67d1081dd9a65fe1beb1951b773bb18a3a41c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.36","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-lqW0rQTLeJ0oh1JJIruWzcqAOtItJY8yoEp5IShnQKn3qWNXRp7jzG1ft/GRNhXYz17NoNjD/vyUCSq3MXt/2A==","shasum":"4a1f60919d26fc4f37026ef79c95a410e6bdd572","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.36.tgz","fileCount":202,"unpackedSize":169541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYG9ACRA9TVsSAnZWagAAr4gP+wcfxwNI8SV9f89AZRmf\nmwljDt4wigAZZU2uqRgEs567uEgc5z3cf3Fo8hffJ/XlxdTf9xqZlj+BgD93\nOsnYOeBhKLxPVBIL5Kiwcb9hZv8JHHOSvKk0TzvCMvFn7yNOZHtCwBCFAY+e\ng8EAylHnWvtxb/mcGt8FXfUHv/TvnOukvfdrMkhPawgoFyIYUmD9HLOT1RH9\nn77SF9NNofti8EB105bze2Xm1GEBeuS8hPjVN9tmicEd+PEmmE5rKNVEow9V\nfHHKdRNixEQOXzVfj0bJ6DzlyJ6B9yTaC+tyVYab7E2EIL9+ifI1AO/5CsFz\nFxtfSGHxO1YAOMpeoce2i/v52SYucQZMEKYVWoptaB8MO9Q0us0i9Jz8FScV\n5bAfHnjge9fbvIiQ7h+Bd5MzH+q/fAIJaKrn4RZSMn6IHHUQoT7JdPXCl/ay\nnf615ALCe965lrk2iD+/9Z0KnAbhV6WnNASV5cRbmSYSRCf8tqPlWgA49lzi\nk61QZQ1VejaVRxzDz1kzJNrN3M28Yp7Nv1Wyjo29Whd+f5h5GlYugRx2KPcC\nFu4RLb4moeIBIJwenpmdGkTqst91cB8ijUrwtqVyrm8VFlQjxPdvWNmwEyX6\nU80hVn7tbl5b+y+dXaOfcxzfDtIokuQtHroOf1p+L0d+mEigd3BTB50jXDwC\nTsd2\r\n=iaaz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDI8h4jGcP6ccs8T9YjeTQIRp6tg9IUqW+NsoMPH/IFUwIhAO0FzYuOd9ZGj/4ihjO0RqdzrzHnTlU3eJxTm/bvusE4"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.36_1566601023235_0.8322305916666075"},"_hasShrinkwrap":false},"3.8.41":{"name":"ts-toolbelt","version":"3.8.41","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:types":"bash scr/build:types.sh","docs":"bash scr/docs.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"f5f4acc9d3ce8d5da6a46549d7cc9373a926f41c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.41","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pZVZpGTO755GZldng/wDvM+ntx1M9FStdmsPFL5N0pzUatA5VHERhUKe+hwualahXv7mmeuomo5zaQ+a8vbIJQ==","shasum":"eff6daf8227fc0c894f9b154153ea461281a6f84","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.41.tgz","fileCount":202,"unpackedSize":169821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYHCdCRA9TVsSAnZWagAAItUP/0PYmGLd8iwuwHnW8V1d\neRZ9sEhmaulvrw+F4ypSv3NMUl5Q+0cwHroy7aJbVog8glrXnbCf/DmdpA2d\nvVM6FUE6ZJGGkBC9i/YyxGkhLP9fAoxbGe9N6FYW8EbF2l8+S/UbsVARmgLZ\nk5ko2GHDCiQaC2Px9i7gB6DomhnDkje/+SbR5B46rwS5whYwGp9f2yM6wQ9q\nsT7xb3PqD6xFIaaRZu66Lj20L6UdD6Lig7zH7n2gS1/+rQz+nP87kLGU5bIy\nqM41duR2rdC3KCqTxE2OV5zOZ3oZEz0hMMOWOeefqPm5Nzc1td/yEWiKxUGz\n4UEYdA8D7PYo9EgG/oKSRXtWV9NmqP3H/61H5wFKj3HTzrnDKWu0tTWKqE1p\nt+UEf/em3HP5/K8hRF6QccVG7snXgcElY3BDm0S4Jb5HdBWv52b4cqP10mpA\nm8cj1KuLuanQH9owTvZng48jezA2UrnieppB5377as6g6gd5Uw+McNjI51YV\nnT4vS7IlrfiuIyho5Y8snZIVfuTmkPCUMHHxhQXNAu+cO25e5+7H+aefEmtt\nvG5LL6VI6xlInEzUsWnM92hZ7ZE36Jso8qFgo6yNUg5yMbJMkL2Bn9FBzNxJ\niJHrOFbQB1Q5iSPlhg1JDXZLEhX5bqpgQXMrFsZ9tco+eFg3XYJWwvEtUzgR\nUl4V\r\n=jjSV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPJ0g22oh1tLjrbqRWOMssZgfUEXhuTOWKGqJKGUgIZwIgC/r5+GQkeEr2tShMiTSPpMHJtyQM3r9BXVFdo5pufCU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.41_1566601372777_0.6172386944063744"},"_hasShrinkwrap":false},"3.8.42":{"name":"ts-toolbelt","version":"3.8.42","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:types":"bash scr/build:types.sh","docs":"bash scr/docs.sh","release":"bash scr/release.sh","release:ci":"bash scr/release:ci.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"d2e09dcb79622f74f07da30e7969d83bf43e0de0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.42","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6VkHFJ7xFZAt7kKfbpVqTQORxCJr4af80YA+sQ4VvIGObOQijamI94zxbc2BDLSPoFk22PfospaHlk7X9p5ZXg==","shasum":"cd23c8ca3807a4fe9b1e2c5c393e2afb8305aa0c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.42.tgz","fileCount":202,"unpackedSize":170112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYHK5CRA9TVsSAnZWagAA/2IP/RiDhYOSrdaboat4WeXG\nPTJE9aFeaB4M1V7uwQmLs3PRvuCsCGrw4zRm5V3M3ckrtpaqdGiPJk2OQjvI\nIQdT+CIGmY2EShQI6ZO7xmlW0xEVZxa88+YUmIHMftw/Q7tgKkvZFRmZCvk1\nGByZTbHo9zIoXklFY0sIKDQvPW1EeMiYy1ESdVGxK1wqBrWrrU1CM1gd1kWR\nw+3KVOeC7aFkt2tex0G9YFiulzzFdoobqi+ypczqzH4htBdcT25a03WrR6d6\n0qPMHbziNkwFoZzm0DHgFVESsE9qH06339SjGmacsKypbQGeUIyhdzdk20LA\nWxhzYGPBwKn/fwAeYwJgtHKF3Ks0AWK5TF7bRb29gRIiOORIWgClkbwJuthA\nN/qBPA20pC4ThYOh5aN41vkN66HRw3xcjgot/vinveG0CJAbw7Ne8ai/iJN2\nLZt1VIu0CbfYWc2LOOsFmcXHiAv9EJChfjx2XsAQATNjdawNVPLw61Oa0lzP\nPfljvdPimG/Hs4rRvQujls6Xv4fDeaE5P67OGBsePDl8i43gWPnLJlpQu6fy\nJHjqf1CxGYKmtiSiUO2SkkgxPMLT35pTNPc1lOijYZfYyPkJwhBhUX7cGdbX\n81pf/bYBA2TMiOTUaeYAZv+Egp0H3HqFbq3RJ1P7MFUU2Ka3HXMJJ3973G+U\nokmv\r\n=/sOY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuJcgdXPfaM+vswDtC1ybTVpElhEO9mpki+hVY3ll4iwIhAKmtn0+1eO1CpUjfl78sQxyN23DaA7dlc/awx3GjcoeZ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.42_1566601912874_0.905521097619294"},"_hasShrinkwrap":false},"3.8.48":{"name":"ts-toolbelt","version":"3.8.48","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:dt":"bash scr/ci:dt.sh","ci:test":"bash scr/ci:test.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"aca41573c1440271271fe423912fb62a06d3e86a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.48","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-XFR2aybO/r3LqOEFVzMHkdWeLHRgphUvHqv6KmImUcJrifZRtP5rBep5adaDp/e5mz6M/W1I/a3B0J8Ix+pNEA==","shasum":"72515d35ed27dbffb42e70a8db4ce78e6e668b75","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.48.tgz","fileCount":202,"unpackedSize":172328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYXcTCRA9TVsSAnZWagAA51kP/j8+98QBEdUmcAXAQLZV\nY65E4vZPtDLnrH6yc5CtPtu3nhwzdtZdiQBZZ2ZMg10tTi7m8DMgwIlwyRkD\nYhxaX8ydMWYqBKN2RXzBZ1W2MvyI5Wv4ped1aA209CzlAD5L4b8ZFuSOd1wg\n7QeOvW6H7sDRrwx784VPTuG5+dEkbsGcNDA2Sq8Lv46Xw15hHvqPZIgUyIBo\n1VY2CllNGnU5hwspsV7EpoW6IVjgzRC8Q7oAiHj+fH8/ltIuOPcsi30sE/5u\nl6LpW6uwpvJs/xulZrsCWiUBl7a2meRD9LLVH17VM8fXKYuvWccgWbcGLBnI\nwETPJXoXVSa3QKj50z4EMZI/1Mm0XCCKwmWqdSD8VysziUmRGnNlvLQJtagt\n5XYvlSg+KrfX9K3G2ctlPhCF+0/Cj9lBQjWaJo4F7dEl9CJmTnsTUoTX7ncB\ntGFiw3ZNTESHrI1qOAvKzqDkVoN0fVeFBTMImXy1kPYyNYqtw9FtcD13X1Gc\nfXU/NrGvRtS1hHx6Gfuwkm3j6SgpqKVTgloQeL4AUvgeFQMBhvtUcaNTSwSj\nY364lv5UV62iw3xZxYvj7Jx1gE9ErRgj1+ldFWx9J5YNVTnqVmBIUreYwH55\nHxVIcyXdtN8nGA6Da2zvkF1FBnf5t1cRHoU4QFXhRfOXHrhMQUm51Szjivmy\nkDnD\r\n=wB4X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGkIZJwrtZSeZSmCFYIh7PknOlvo9i0V0UQ7MndqmNE4AiACH502RYLptji0YcJVzcrWd5Ie2H7KjGXS4LsS/imyAg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.48_1566668563124_0.44117961775057224"},"_hasShrinkwrap":false},"3.8.49":{"name":"ts-toolbelt","version":"3.8.49","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:dt":"bash scr/ci:dt.sh","ci:test":"bash scr/ci:test.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"3d266f0c6e927f5f8d09b0142b01088723246177","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.49","_npmVersion":"5.0.0","_nodeVersion":"8.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GWE/MwYiP4Vo+Spyadin9YAEp0Nta6KpFrNxZBIc6t5cmX0bVQJEz+bWT9yelB2zW6DggxQ/f3yBiWo2p2vscg==","shasum":"312f1bc15ccf63e6eb21f7046151bf20d64b2900","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.49.tgz","fileCount":202,"unpackedSize":172635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYXgyCRA9TVsSAnZWagAARAYP/1BUJ2NOeKkBKzNLRXe2\nuq+XemjoHSQfwCmnbTpI01Xf8CXfVh21mOZMdOvoJyuKWIRTlxpyqX9o+Qkz\n3pLtnhGM7Al1OLz2oGHcpU0wHTvTXVnAl7zRFUO1091m4edzPzxGZZE1qUc0\nKHoWnAH8bOaTcP2K/zx3KXU+ZwVQ1qs5CnFhl6DxzsOxeWO8GjqzWkWBS0gz\n7KIBEfY6vRHkkt6SbNZJrm8IoHCvNdqIYPT17o17SoGCMBoqWol+kPHvh8V5\nVNIeDAg5UglavR3ZU7aIuS4mm3tJ1gsE34kn+y5k/K93WK1N7iEWEn39EVsp\nPWJY9cf5eqWCVjv+t+ngT8sFmu0CV/UI0vLLol9GTceBfwLs5AWpYkh3Im5s\nhoo6V5co64U9fkTYR0en4MiSdxGA83FXLarCG/ytrHb3ChOB5hYDSseOmddX\n3FjHm7XaX71iGzsr5yuCNH0eOwQkhDc+vxazccCaQhQX3sPgP7IhQJDaCots\n1oXYvga4UILnwFwSTbIg94vtIJsnltMR+YnvYx/3+86ksR5Vc62ivYtfzldS\nNcS8nDNWUabHG8apGTv5ZvWJnl6Tqh22/SgsdUzSHPqbYI/uE4ZkAl/JR9HP\naefMgMO6XBdysZmZ0tgz9mDhSF1mDEEjDuXZj0UPOZBUMcJe9aXzV20ABzMM\nUCHq\r\n=Ocoe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEl3oahKKaK9bZLf0wRH1K7MvT99h2+fz81WYkRXa0VIAiEAhENapvWO6/0abaF0p1jJEHmwI7ZWWDB2aobBRhkR9qU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.49_1566668849780_0.6756064781927218"},"_hasShrinkwrap":false},"3.8.51-test":{"name":"ts-toolbelt","version":"3.8.51-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:ad:test":"bash scr/ci:ad:test.sh","ci:bd:test":"bash scr/ci:bd:test.sh","ci:test":"bash scr/ci:test.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"46028e0534135b24fdbee073c8e2745c44afb0b2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n1. [Read the\n   tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n5. Commit your changes\n\n   Make sure that you follow the [conventional commit](https://conventionalcommits.org) specs or you won't be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n7. Commit your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>,    '31',  Test.Pass>(),\n    check<N.Plus<'5', '-3'>,    '2',   Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.51-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qMrsCnjyWO6zFl2kZ9JVEYgPU2sKTxKVXQ0c5Zqx7suP+vUKRle6BxiGi1CmgkWbQIIwGICOgun9ZFmNWFtlpg==","shasum":"10331f957463129514d6e4c466a3fbb6d9dcf61a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.51-test.tgz","fileCount":202,"unpackedSize":173480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZFjKCRA9TVsSAnZWagAAgv0P/iEp3OFQ1HVT/awABFds\napDqxyXcVwniP2x/CPWVKo4nLq29hw88S0N8IZmLumRG/GF4w60KdJJGnWCY\nFP2FYbaR41w4IYVHGWT1J2TnrytZW5s7zGmYOogMFehc4pXfA01TlM992Qbm\nGXIVO93msH+LbDbaIueRqmuDpXkp0XLC4Oda67XMZ53Y6T2UG4jMYfCF2Stb\nriAtZ579usE50mYWzXtIwLilV6bo0PWZf2sJVmUU+IaE/IiDKFAqvbV7utnx\nkUIjlJ3xwnGd+XOcV393KAX12Zx11SXLSUk5cx5th5OOHYgBAw//L5Bkpg2U\nQ9cuwCEWHTupIoAJCqdos3naPgHnYQoE9BeOHDKWJKUHzLe3i7CyAtOrZu1s\n2xxRYtvT4EVTaWQpC4rneTgeDPEhPJiQv24Q627CheVJHFamuLbbIyXpLp8/\nXOkgwljafEOK/sKk99Kp9UXcsMBzNHBqVidSqidGupEN1jW3DzGxZOvd00Z+\nV4ksjl2bIoXMLLWri5RcOMEFqvybNzuiA8Oa7Obhpd2RfXh42QtGnjfblM8W\n8pu6OesEqG63FTh9vLsyIXvNI8KeNuqG56Mm/7bNYgVRCitz1tMpEiwRnxXt\nqZPW8l9uh7Q39PN525HgRY5RUXnsixUrgryoK2DoMeVvelJOAuImLrxasycL\nCSkY\r\n=Pp48\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGNpdwFIx4kDMb9YfygtAyJRxUgzi1vW+LHpg7ByopZAIgBF0LMlflB61qLr0BqRNfUMiP74Tnjxc8WAnPkRJMYYI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.51-test_1566857417688_0.6182970967752566"},"_hasShrinkwrap":false},"3.8.51":{"name":"ts-toolbelt","version":"3.8.51","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:ad:test":"bash scr/ci:ad:test.sh","ci:bd:test":"bash scr/ci:bd:test.sh","ci:test":"bash scr/ci:test.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"46028e0534135b24fdbee073c8e2745c44afb0b2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.51","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-p3S1fgwRt6uKecOPrqWNUrxIBWCJfpO5Yag1uGGvKl5pVuH0xsB1q+kImnATkyzX26797h/Zqc8BIZPfMEhDug==","shasum":"749dcd72e044b525ad14940ee9c3eef01da4a0f1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.51.tgz","fileCount":202,"unpackedSize":173475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZFmmCRA9TVsSAnZWagAANOwP/RfMBZVE00zAnL6FVpzk\nyeY22wFsJaHZxCh/1yn652g35FBFjuELDKJYG3uzmWm/E4ysLEsdRxZjN7WA\n5QZMFol3QSkbqLZMhBM8JWGn2RXflN44aILHgR+abx8+HDjEDbf55qhboLxV\n+s0hAQqQSmfqU9LWJw7U8BY338+w/EnIlA/sKGmkqMffJfC1CEP2x9HZUeIu\nEcg14yEHe8afuxlb+dPhbrhd1O+vYtQWaqoldzxSleliKUewcAqiA0UE821d\nOeOhr4pFayO5VqbhES/rhfQHGtxnIUoLEP6hT2/2PwLX9etWKuzPLpaKUlmS\noDxQi2VJEzO6OjGSir2BniqdfBzSCS/5zU6QK4WXBOYyWkLCR3IPXj2b3k8w\nWt0daEmJxCtujo4QK4UNh/oMi4e17VFOtQrlHaLwXfFKscJthjnEIgcrMukx\nlbQDYb0pCDy+nobFddyRKYJnY3OJcAIo9nmJSgPk4O7r+VrLblAEwMMjbdpr\ny+wU4iRBXck2LnpBgd0uOfyyLqICARK17sm6Swu7rV/OJEmvPZHD7pyKkOSt\nsrEDQP/GOHLAecYxzdTPDoCc+MTrgy0fDqHYkFrdM00iDm8szp/Yi4yzj2hq\n6/ehQrRPUDdv0g3QNl9kL7b0WXW0sY+Qojss+2E+iCIFOx9XmQimWE7R9n6t\nEdDf\r\n=iqUQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSqN/fvX0Pn3efdSbCYjrlmAUSPiQUVJ0P4BJBwK1UuQIgfUNo+jQmLZjcZFOCZzDnBJWVfIZlYSE18uz+TbV1Wjw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.51_1566857637745_0.032007747251731056"},"_hasShrinkwrap":false},"3.8.52-test":{"name":"ts-toolbelt","version":"3.8.52-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:ad:test":"bash scr/ci:ad:test.sh","ci:bd:test":"bash scr/ci:bd:test.sh","ci:test":"bash scr/ci:test.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"fe9781ea57291f9aff5e0a9348c9d41f7e78d1ed","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.52-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-KP/BKK5LY7Mvhc05vJBBfodDO6ugaFHa82z/SxzxqTG2qSIxQbkSOkYm/u6W7IRWx9+/c3XL9sNhl+UW7C8iBA==","shasum":"b21565fa50b85570bacb745e54397c43874489c4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.52-test.tgz","fileCount":202,"unpackedSize":174172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZRR0CRA9TVsSAnZWagAAiJkQAImNqqBKoyXwZXlBe/NI\nf7JtYFQXaFnFE1KIlf/JE/u316+LVELd2N9J9WPGNmYvVQWdKBy2o+4UDbtX\nTt3XtWH3z8j77vx6+rxVvUzL/tOPPh2SemdNJXjxXR5iA88fuxVNc5vKHhF+\nhwafeDqjzc/pVbnDIDexbUaKxyl1ClrmYYbOj37iorq7OseF879fa9Te2Hq1\nd16QbvtMSZ0tbapLp2fzmtLxNdA9SkSdFLL2gX+XYjm/IaI457cC9sX/JvfN\n2MIO4cfAmpjWBLqGC3rHcjQ9R+ekEZzTC8+CHTIPPnfelsIhHNmKloRHaVph\nkVmuQW2kyTboE1sIVhcaRLLYyn3+U+6IAHsergORdmi+ivxLKAoo9iBrzFIz\nt/CpXDMfc5Rwpot0vTlWDG1hRDtGU0VRS4UCi2CLds/itAQVoUGlq01e1R/1\nNc/u+f2NHiTbZO9TDWjNeAGq7iZr5EflNgAU1CW4B4LfY7m5OzLCUC/K6ckS\nllkoLe+uXnorPj78arwEuBP2sQbRbHkrk1KwJDV1FIg+XozCn/Dkd1TA+edw\nJP5Oafc2eNqfWysDbSBB4Sc9/jb399vAGjR2ToyqOXjIAnL5S9KXGJR7N2G3\nMdRJCgxZgr+Q9FzggL86xjYOqXI8RvdBnj37VHZWG44hw12SowfpjPXnMUFV\nd/dP\r\n=faFA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICImcwFV61MWQPUqycdcUZecEsu8fRYKNWBwvSr94MuSAiEArPgCu7XTduDPJ30GrqQWwwL1yTPXj5lg0EkeZ0bu+QY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.52-test_1566905459537_0.7817938977399113"},"_hasShrinkwrap":false},"3.8.52":{"name":"ts-toolbelt","version":"3.8.52","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:ad:test":"bash scr/ci:ad:test.sh","ci:bd:test":"bash scr/ci:bd:test.sh","ci:test":"bash scr/ci:test.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"fe9781ea57291f9aff5e0a9348c9d41f7e78d1ed","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.52","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-w/Tcq+P72iXM75PGoJTjrqwFun7REq2Vb8yO8UH59kZC8yrdNEQpjjJsUUS6phP/EWnrNE1/Gzz5thVHjHu26Q==","shasum":"c0a6a08ccc104123ec01c3065e8a76713bc0545e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.52.tgz","fileCount":202,"unpackedSize":174167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZRVKCRA9TVsSAnZWagAAoxwP/2zjYAr0FQDGeo8d7rB8\neSw+6T96ZThxaFGVid4mDYmYmsgTwmB8kAo+hSk14F//tYL9PESd8blvcco+\nuiJBcIwOB4AJbAP00Z46EyPU+GF1GW+5FPYOLupG+DXXxORDJVtC7+5WFAus\n76Bd35EH4xu1bM+PdCQulg6Pmqhspl6+7pCLRRXzQ09JfTepsEr/oWMkH7g6\nCxh4vpOn6j+iyQwyxpNrMQ3RSWI6CH/D24YcVd1XKEXu5buT+2unz+0ThVcX\nCfT5pRrU4J51YQITaOjsYf2pSCSV7jvE4wyfakCfe1gjhDs0Hbc2PIG59U9g\n8qBUVJc3SMzSmTXFwCjANqQezMwuOKzvxeOwryhSYyLWTlPRaT69ET18TrNv\n/TtjvqjJIxptZrASP7+Rfti7AeXHNTXlt8nV0M5pB5b81YSBpKmZfUUXZZDy\nzOgoXeoV+B+VrFvuy/Vg+xlL7MaiUjba094IC4u2XZ/H1Y2FSf2uAxaCZiAp\nWSptripZ9CL7to/E8wG7TyKapLpcWT6QLpiXmU+i2swhjfZ61F2r6Geggc5i\nn7PAeJ6n0/LuQul2KNLLgx1cCdFPBnLqFRcqxlEKlICT8CuouEo42DqWeHFT\nfUpSig0Mz6wUFiwrbML6MqKuGcjOaB+lmJ2PGT4NTNUSXHpFiUvk3qjHReIh\nZEDD\r\n=LtWG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHokZytx/kTNAbgl7JnmqnkFPDPX8ATxSaUDWPdl0w33AiAYuEx+s7kK3Ef7LyIAdHjklqhpIFwmjWoo3EQP+SvEqg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.52_1566905673902_0.10140375403345625"},"_hasShrinkwrap":false},"3.8.53-test":{"name":"ts-toolbelt","version":"3.8.53-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"2ce2d07f29d694cfd319d55b0363c270223a4a60","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.53-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-7hH2a3InyrMNH/J8/5nwCZbIX4roU/UhUViFJLDvA2HyQS3NjUF+6XL8o7X+qZ1kGIkq1nwNj50pDEub1ik+ZA==","shasum":"a54278b93ba1ba3b00e49c66ae91479c16fc4c9c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.53-test.tgz","fileCount":202,"unpackedSize":174649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZXywCRA9TVsSAnZWagAAQFcP/AjIDAd/oidk80UDJ8QP\n8Qpy5xwqPcWqTpULiXFxytyPDJXrIRKsKls/7WNJp7gpluR/nxCUVH5MUoXW\nsKq2sz8WBF+qNJbFmn02tKIzf4h0XWjGUG9nGFp7PidCu+ZizlZyKcWMCRwQ\nBBr6QdEZwl5KZe+2BwVOH8xU++i6X/B1t2ofOTzPh+uRze0KeFdjCZ8LhBBA\nL7qakbEQglnWreRh66b03Jo7oU2k9Ee/vZH44i2cCT91UUMdVCzOinZ99/AW\n9gxgfsIUJUT24jGGays5nf7eeM5uQFiF3DAV1YJSh7RCoRh/j1uJeMkeT0js\nbuTkcOmNm3cB1fzyf46vJyn6cjgxB/YEB3G5mITgsriP1u5Bg2EVRhP7CTaK\n96hOa78RHcrcuFGpMs0BgnmULbKQ129b7em6ybB72qn2/21OjaTUVJx0DXTv\nYhaHjc7L0pYzUrG50BVmTLjmnxvJtkgwgPCTey9FaA4GySV0/KiRQdvViHSU\nkjFC8QlFyDr7pyreujZnl+/c08Vqnl7AmUVyNwU0roq1FuI33q50ZVqjRGrc\n9Pc8RBTw9ptp8flY4hUAIXmoG0tac1v3cZb4g8KEP+Tirz1mr8XBHMv90Q9N\nKGOBZW+qm8jJDoSLLIFZKCli9ZkbGNxDhHfsraU/QBjAtb5ZTnbHLeKMUbOE\njnID\r\n=3520\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOkWLbrpMSN+/ffpC5W716A5rfF/bT/ToN3EFFJGMqEwIgRqUlfJgXu5cU/Gwyg96yCpGlQz8HqHAX0vunpbmUh+U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.53-test_1566932143737_0.11210964265088541"},"_hasShrinkwrap":false},"3.8.53":{"name":"ts-toolbelt","version":"3.8.53","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"2ce2d07f29d694cfd319d55b0363c270223a4a60","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.53","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-WWE3u5FY1KCx9VccWGyvC43CHk43fZsKgx6ShtNKQDPUVivY0t/zLdjK0xiPM2OUt/H4NpelWbp/57O5OsHlrw==","shasum":"44e3ba99a9c41fabc8185cc6fe070a3cd1b3ea03","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.53.tgz","fileCount":202,"unpackedSize":174644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZX2MCRA9TVsSAnZWagAAXcwP/1/PDywFlwJ4MvuYGR5j\n3z848zx3fruNpg3GQ0WJVSAq/gb8FhzMsBycyfj1JgoaQ7kj5A7Xfh51v8tR\nbmQCVaxHYMaAJ9UCENepCeG6wtCvu2L6JAPgV+1sNuEYoTNWM4xO1WHj3ld5\nHJ7Z3MLp/dYW4LbbuF50NPStj8waXzUj3cAjUmfAgzZeP5z5AHLzJJ+Kpkgs\nrIrspwaKmpmxCgc64pULNLpVsM4E+3gqrF3VSlteOXrd2HnDYrOSGUlWSP2B\ngGAxvbck8iFXYCxKPa70USf7MB+Fdaz+U7NBA+smRiiZa5PmdTVvOyHBV1Lp\nscWKMBuMrCUpFtEOxGoBu1dJ4/I/PM51kiuQBELmL6He1OrFeVTv0GIII8Nx\nCcMSgT8ZOxn08i0//fHki96hbI/JCPXKckjkosNkrz0B8kps2EzFUGETvMZ6\nkKGslQ2Gtm0MLKYjAJIz8uZyFwFVfSAzdCYuYA6h8tQMm9ysryzdj2WSW0Zx\nCVik+SvS0ERFMueEigdfHcVNcr6jCF2KHz+aG+zgfPcfj3LIM6fWtiApUOOE\nQzd7buawYPLDoK3D0kj82BZ6G31qclNNA2FM2J4ssqkv1nZSW6xhDOmpwJFF\nyL/aPr04myg2YW1uv+A8AXwHLr228dl8ZPmZjRjZgl86H8TLSxePLatklXi+\nDsgd\r\n=NCLD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjLDzxLYiJeb2mmvMNT02tIFZQuEKzPs/+9iSs/btrJwIgLBz0I1Z69GnkITfHh1FV5fmcLwUZAjmubVI18Vkky/s="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.53_1566932364049_0.41468313217144237"},"_hasShrinkwrap":false},"3.8.54-test":{"name":"ts-toolbelt","version":"3.8.54-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"7cef54444fd5440275c923578d3096816e2a194b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.54-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-q6luZbqnByNIWQ3U4i2VYrF/8wZpfKuKGECXJkRtsTnha/wWrCflMKMKFvraBOH1YPUrbSGJTPy1WOnEh/Qvrw==","shasum":"c2bf8dd2a03864e48bd90effc36476ad33ef0527","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.54-test.tgz","fileCount":202,"unpackedSize":174972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZYcgCRA9TVsSAnZWagAATKgP/A+QkF8NIlp6aBmjsJtu\n7MABrF31EiY3Y38nrA3OmiakDW3H0QzSTep0zHsxdRrXmQrfNJ+ttoCtWODS\nvaWCEBJLE1SUneCXrBshFRuaZha82jZkQHsISyjowOF9nzqLLMWbhlfvkbbi\nCashzwZpHlPcd5rSlHj1cJa1WtrsaVRCS6ANNgFVJTcsqA57p7z6Ip6dB5nL\nPmKTPiiOIx69yioq6kyTh08Z7e3AxUmIpkQBDRExmXmR7s0d9oTtT5t9wq8R\n0xo+mqgXbbmjlQDUHo0ziGlOmVsnqrooO9JSEJxVpL/3PBQjfHnbX9RTyxNr\nRmil/9RxpMszDUWcs8EGl/xdh3sIUxu+2U1X9SiHCdD9tg+9z6usOaLBzoGI\nOEHnm3DW64pkpcPUx8B4zrcEkF0pWg0OwPL4zv862GzY61aeTCAE1XB+lQSP\n0N6vAUusg5DUu9aDML6lFlQMe9+5ZfOr7AL7h+pQmpA3WKZmR7/5i6gBY0s0\nWPOmGmuBIWrriPj62Ffzl5pwZ0t1lOmCJrrHncJBWt32IwYY02dkPK8xTHqp\n+yyRwEe7viOxujRlAKYuozTkX6ut1AQBNzMyjJrKNBAX+l0HGAyVGdHu5vv7\nnmgHjcEMDwsxTvMycH6ByRNd0I7SkvEDCqtc0G3dW/3moCd49k2DpUaa75nI\nuQaj\r\n=4dj8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBL6DNs1pOSsWmscw+UG/15gE6BxNg0CWZ+u+xIswLUAiEAmYbDjgp/ppYdwJnCeI7UTTbU/qovrmgmN2dqLYosh4A="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.54-test_1566934815971_0.6284909540227939"},"_hasShrinkwrap":false},"3.8.54":{"name":"ts-toolbelt","version":"3.8.54","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"7cef54444fd5440275c923578d3096816e2a194b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.54","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-g/+2gQpF/tjMXRKtIfxSGsop1gmWMfcZPRdOauxaaT8zD7CI2I7xw6MgVGINbK8Lzj00yeG423mR4WmZLa9Jrw==","shasum":"886000d165cdba0d1a3d3c29cd554c5fa7b95e5c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.54.tgz","fileCount":202,"unpackedSize":174967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZYf9CRA9TVsSAnZWagAAI0YP/2JqxbdPXPzWP6B3j+yR\nDg3OLAB7dsyCWrLZXQUdFFP9on0hAfzs4+WldFrxdkZIURGqtKiFcH72SSpE\n26/NGByixyTcJeqjv2Sp+BDuxIM1tuLdHT4HKmK6Vk7Zeo8RjaJ9TLTJkFOZ\neiT5UfvBSt8VJDXLfVZPMoH/160sP54e1GWe/TVt0Qzo+kfs7T7k4GRpkXEX\njXFoXSdh4V3MCHxcC6EMOyLHdiugieH+TR7TcpN/9q1PqNXXXisRIS7VpEA6\nFp8bMBqN0qZ6X4F66SyM4zxshElp8MkEZIOBAIvahR+iXvmbfzXhs7cYBujM\nCt6A0RUh2ZL5nwLkAuHNsbkwtOfjtWOjw0ru/G6lmdWbTQYK6FxRyFOlaXMr\nU9HkkzQaGzq574aX7p+m9BJXVHEM6S7aB+zEnBDuglB0QGtF+D1PZ1z4yxqt\nuQimp63YAlCAeABEfTz21+HP2RCjgteX2BJv2JfBPZozSx14DgcC2YX+N0zr\nO5BLaaua/7sVFyDkWmypedvDfBi2TLMq+rcxCjX9zT2kkIJxbWBHonFY/LRv\n2Ts7FAooMkTjkyLBrHdwzWzoMaaW39JoxJuXiweImgHubDXP5sMmxAd2htsv\nuX8FJFkbffGrOOE/qW2T5vA6q4vSYIQrG2l6AYP6eMhx5rDf39GSv2ri8vH0\n8jHK\r\n=bftQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL/FdXxLJJRAmym48o5m6dTn3a4xu+qPSNRcqQ8+WE1wIgcpap5mLNlDE5ZW6Rnmu8uSuNEeRwE5i/yhUGq97NABQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.54_1566935036680_0.837752562438062"},"_hasShrinkwrap":false},"3.8.55":{"name":"ts-toolbelt","version":"3.8.55","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"7cef54444fd5440275c923578d3096816e2a194b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.55","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lnSUYzSoPpb/MPfWyIj09HfoLvJAQASIjg+FwzLBGyWc9v4fvACUXu5pnQzCzDnm7umiYwOdcNLWxETq+EgA+A==","shasum":"8d3ad26a9fb4152a8002cbd2de185f25fb492c20","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.55.tgz","fileCount":203,"unpackedSize":174967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZYvQCRA9TVsSAnZWagAAmmsP/izvEayCZIHZhqNsRx6I\nnmtqE6+Dda6QEEC2wUHAm0R/xccRaxBaNd3V5Ch0xH4ISaVlef8WAmQa5Yb9\nrNR/olCXkQR+JoTe0auSJu//E7IpZWj341eBD7M8ODkC3oV1JkWpCFUB4zex\nmBS/zXERYu3CSjsRlnDcak36ke2EJe3hFUctDn3LghViaT25DH5m4U0NpJhO\nR/StSyxHHa1Q5qU3fgFpeDyteiy0GiPUZ4zIr203QarhvT9aS9YVLgOMSYko\nQ1onT+4c9pQV0C/6+0AotIDqF2K0q9J2jYaesncVGc3u9LYwbPm+yvbGD7gz\nIHeQfCfkvXbGWjJbr0AaQJbOeM3eM06IsCyCvinWs1oPI/PlzTZQ++HqA9s7\n0kRkaiT/jQ7yjijoCk7qCpbuTCvcC6l3fmZeWIfyNgvFHIjNlEoUHN3RCkN6\nCuJyBPMLXRAk33KtRWto3OTignnn1T4sqcmlbp4+w6pIXj0ASQ7vTtogQt/g\n/BCUYdOYrKQwsa2H1ZEKPA3/olTPWxXOdHFNcevYuGXV6c8D74C/nnbfvUCL\n02HXNLrYjCHu3bGbKuo43p1dyF7TobpngZ5ly2RqFYfeMBgJ0EGOC3FenSwz\nSUtqM0+0oAA76xruh/5IlsYMPwdp1lKMFxTybKW4AdKcGk0LvjsguWIO9PfH\nzHv4\r\n=zGeC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBodO9dzKDw62baI7cVpducV9L448cJPkVIPX0Gy4eHAiEAiKX9x6Y4TsLXnMIgM3/VGPyukw7MHMRJVhz+yoQA7M0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.55_1566936015429_0.024323585243353207"},"_hasShrinkwrap":false},"3.8.56-test":{"name":"ts-toolbelt","version":"3.8.56-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"8e9502d24f3f0b2f443f66df34fd0f3ae8f1d203","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.56-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qNg0M5D6r0wMZs3aJBmdfuWrV7z9DdQMPcqQs3QXobzZAekAvaqv2Q/+YVLK8kWluVpYtNhb3K1k5rlutSMXSQ==","shasum":"5eb80626d6acf297ea9af1a836bcf049106a31a2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.56-test.tgz","fileCount":202,"unpackedSize":175233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZY6eCRA9TVsSAnZWagAAEYEP/jhos8+lgfh5iSTeZXiR\ndd/BKUH+WTTDNzOZKS7rM81iw2YhZQLEd1VJkldBehpP6fTaur7mC7nK9HzM\nhUIX3+2dvPhf/UCr7Zm6onLkuVHsp4x5+r2bnJpsaosw/rhJ4iUh56YP4KVG\nThaKoSaWjFqhQpfRJ/yU2IqVy6V0rjnCgyyRPJzbOi7XtmlORJU+2mroW60j\nF4SgSYobRSsU56P9aof7zKHk+qok7HebLw+4HQ9bak2HNHHuukoH3uqHKv9B\nsh0NYjb4Gl4feR+oWI89LsYW4IWjZ0NeSNvi5ic4wl9pJ1jy4y2ZNptzVaaW\nRY6THe/7TewVeKsVZvlOdhltaD62BRLyLQLSozDaC9Jh8RgNFkokzUJEqNk3\nOq3egX8GbXiDAOpV2BWBSfB0kc/vhXjdSQA4PJYlS0deDa5pJmFHxGPkOgcz\n0IRQ/VKLbJMLqxcHWMFs/bZTabXmuO6c8jhRiadV3Nq8z2gjKWFGKUp6736l\n9iTk5p6eMbSe8V8tPsjKG4lE1kRCQb68Hgb5sDMT/1as+xtupWi73+fk+1Rr\nOBjxxQwEmo2x8biDWi4pF9gS4/mAZtY7oujcVZOPbdqL5ASNqi8jpifjC24l\nqGJ3uKo4v73TYeTauG98Z78Rl5ax0qMgkGC9jhOFqGKPPgh/7RzKD/7kTAQr\nbqzW\r\n=N3UJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFHLsZFKQL0VVM6h5u4ZNlYzH2qRmQx2SStijQY5tuXZAiEA+eDhfsjMkrzxeTUGGSyM5hBly/kUdc8Qd3zBc7Wij6Y="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.56-test_1566936732829_0.4347442237976935"},"_hasShrinkwrap":false},"3.8.56":{"name":"ts-toolbelt","version":"3.8.56","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"8e9502d24f3f0b2f443f66df34fd0f3ae8f1d203","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.56","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/4uTPc+wixFvVG4JC/jQhdzp3N4UrfuiRFi7skojL+GotzL1NimhJy5ogq/9TElCcWYy5uOKEeem0G3CjkhTYw==","shasum":"84f6a8b6d43e3d42d57436ce77b5d26216cb42df","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.56.tgz","fileCount":202,"unpackedSize":175228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZY+lCRA9TVsSAnZWagAAkukQAIlt83f7uwF6D/oI0+he\nx7dRkWHuV4qzRWXx/DF4b7NEroVg5p1kFTLaKbpwW/dDArLnAwGy15f/ondG\nnXbyDXnnmQU/PoUMTqyGM5GAGOH2vvsG53CH98eyvNrIKJZwWRqUqwP6kOZ9\nq+BKNc00/5KKJ6YoBoboKl2njiHvc1p7D62PUszirqU6+NmgAdPKCydka2KQ\nuMBsBj2JkVN5EtzOwiDMOVuT1M8IDce+4BMy9Kygbi3m00OYOEsdRKZ/kMEe\n3+ArSBdzZgOdJVVcghZgQIgYRHu4IKW+v9m3F/gX5uVNagB1+FRLicwd42Zu\nlo+pIoGw5soSvNP9kyJuKXO1OWlNZsFU7El+D6NkFEVoCoFVe+qdSGXCFbC5\nt1ZZHzCIGyddZpbRW38JiqxLZSTDAu1Imu9rvMagRForQf0fz+g9ucLNlP3Z\n6m17+wwKFxrh5pi3L+w9+WcyRGI0OpLRvLka96UA/3Uc65/slYNEMU5skxuf\nwVkcA2oZ7ZPNb2ksNH5cU+ookRt3LJbzPVdOx9FGs15aFV2aQt6ZVlw5QC0f\ni0wJ5pzZYu/wXqs5ppRGjYQvPDdeCm8eXgIrkacVtIeejQti2FVeB9bdV7rN\nXdeaSHVyuBrqKWvN+FF8f+NZl/TFGIeOemTFoS/PvznUp0raArFuax8389Ro\nAiAo\r\n=gji4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPWtyKnNbLjxcQENclkcCqvRGppje9+D6LrWkF5tFGqAIhAIEPbeDZZkhIbmZziynsUDQYnOlM4dMvaQM9+1EjXVqe"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.56_1566936996399_0.513299087155159"},"_hasShrinkwrap":false},"3.8.57-test":{"name":"ts-toolbelt","version":"3.8.57-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"dfbbb1ef77d50b1da6bf020c59bc560e0aa3041f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.57-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-4Z3cmobg81X8CFomvHAxfUKDqeyo7/D5P0yZ2Q6ahH099USLREdXr4nVlnjC5rMWO27x9XSo2kBKcFxJKRMmnA==","shasum":"4ca2f80edca8884ffd7eb57b27ee313e49b46d28","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.57-test.tgz","fileCount":202,"unpackedSize":175570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZZO0CRA9TVsSAnZWagAAl6gP/0W4dRnhZxAUUwupQjqN\nfM6Or4jIUT+zlabHLIf21H5IdTixPSze7yt/ge7JCCyTjGeqk0bONy6kr+Ku\niGRX4ehhBaWVvj8FrKllqAOjCDoEpmt5fYswM4TmkkW+swdlcb0jAH6qeMjH\ndZNQzgoI7C3U1RoU3irMP5XTQ4MIlsrhHhhdtGYIpMfPzH4plLUpuKOKubZ5\nA2TnGd+Koo+uylyGqrjLq3a57K7r8c/mPLw5nrTGsKsEBaXHkHe8JWk3Ao5g\n7TKM9tTdpR0opO3aXbIN+l9hesCzxHCKqxtZz9WWAC+WJerc4zq9jgWI/wM3\nRd11zW4ZF+eXMtkmXifiWmAW21nCy7wNfXAQZ3QMcClIWaxDkg2XUgcVhBQ6\nF1kAgRY6rc42/IW9MH/D2/Ah4z56AlB6xjpsXAwbByBDA8zG52OyayD2IgeX\nCWDtqdZzj+XUrwVFN9ApxJBckJOQcvwQuHorjGFYcBiOwTjVKO60tDApphoy\nfmjAMJGZgYTTIEa2+AXhivkRyln8SFsAs7y2yTKV2trysviCuCZsOMd4gncO\nBmP81rljK6/3fa2yKLtr4LqxV18WMLE6XXreRh47ssRfNbEC1lirDk12VOcI\n1dwdnknv4/AoIlqO2V0lRIFoU2A7z7BPb3Y/QPIhXJEsIgJjwVvuNPQR6AVg\nEpS9\r\n=zmTT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBZYzANIDNXivbmjTCmEqSVCNzj5bZFfpJhCW5mj23GAIhAIodmpr05caOIORBeIK4Jodac4vwg0zmuIHIOaZM7ppD"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.57-test_1566938036034_0.5171433005360739"},"_hasShrinkwrap":false},"3.8.57":{"name":"ts-toolbelt","version":"3.8.57","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"dfbbb1ef77d50b1da6bf020c59bc560e0aa3041f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.57","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-beSC2IaqD7+Jko7RtbGqQFWIx33+dkX8dx/JKucGDPsE4bcFvJWvHsD9UVqz310vXI68V3WqTqwiQLC9EWBKag==","shasum":"d90067aa126d660cbb7dcc2f653a8cbe585a25a9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.57.tgz","fileCount":202,"unpackedSize":175565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZZSZCRA9TVsSAnZWagAAIWAP/RExV0nhbmFGWpnehjtW\nHxK6vZxa3/UCHJMUhANZ6yby6ljCgCoYw4L0SAzmIyQ6co5220fPZp7a683b\ndUNnNGq6xt4t6quCbX+M2OwVoHiTphoX3EjyqBqeMRIHISbbukwXA6ibxZXY\nNVZ2DFO5qI2cPi1zaKpqjTMakZuA0QpdYwHWVfKTe/i9gLzwlN6vdUEdNSME\nlplwdlVco8q2653tJ0RuE6QlB/hKZNhw2tPYtOqrN/Bs237oWt8EanQnmPcx\n/+5+jBXdgodGWTxzi3eHKJf6K1XK6gxtUdnupqnbJ21atxJpDfYGbWFBL9BB\nviXvPqPOcV2JRiKtvWYLC69XGB5zWIx971bwAt3iErU8h9qaUvA5l2C6TKlR\nUb0ke3I88/EE4uW9okqhIDR269t/fBHzLqabo3VQ6tDzITGxryMf5Fqze6bd\niZBmpkOMQbsmGPUFd1KuRLS5C47fYXmb1BpUufN+DHS4EjRWPZ7B77856qgW\nsJBXZjzlWUEXkLWrOJMsCfBhiNvBXEbgwshJzanJ2mJQJ8w8xywVxQp2IbX9\nIDvcKzG3F/JsPPbglyBSVhI0iIBpT7TDn6eVFj4hTqBpmD9L1nzW+PvSC2gU\nhxqAQ88ZJ/sFQBI57uWeRlIk80bL4XWwFfZcYLrm8l3ZRUM6uzl2Lr2jEcFg\n1NLf\r\n=/o24\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbowVIkOxrbMwNxVr6bJw8rBgopOuJHd0BZVq65pfUHAIhAKRc9C7Cvx6B7i749hyUrRB9JHzfuV7PBsmxwtZvPRAT"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.57_1566938264617_0.08464974823430405"},"_hasShrinkwrap":false},"3.8.58-test":{"name":"ts-toolbelt","version":"3.8.58-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"148c946b6ec00f9e894fa375e98b30eceeecc6c2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.58-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wc2GkkfUcxw1ZBqhIOM5B/XA4JCBePDsVJd5IZ8SvLoHhcJjrjlvKZcKIENV7Z14LaXjRBeSewj8ugssmIzZNA==","shasum":"3da42d6f26015879ae76da7e7bce2548092ddb88","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.58-test.tgz","fileCount":202,"unpackedSize":175755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZZb0CRA9TVsSAnZWagAAq3AP/iVTjUnRs6DC5oYNV/qc\nM9kNynOO+ghsgGUe0Y9sx76sjK9iieFd4GIhAOkNtYlay7A/8/3cWq5jj7fE\nC++dJ1pxe6cfoc8DqVDMhv1FXY8/BJQ5C1YZWrh1Z2qXNlvJwsgI4kkSIT0F\n31cq2ONbIeU3l6iqvi4yrJg8G6L8Q8xoW7/7IUta0iRWU3U4lPRKq+4/WHWz\nX30BBmIybpWz1gkwMajsYvb7XhifxadFcVDpCh7umavpgbQrhjemF7ALNa1A\n13qs15Utq8XCOQ5O/QeCKxRnAjUWvOS4k2YG6moaU7kx5/lxnY6ck2raHcCa\nbQX61rFngeCczT3MhaLWsB2tXF2lRmnpSYN814araRYzN0zNBgp/5UqLgblp\nnKTfgOuTmvgQOBe2dWPOMUC9BcNTBN7ej+FVSWARHIPjztkyW8aorxNScax4\nHoPBtWOY42/ZRlDWmSiCbo6Kl2Pb3FfCo8SVuD+DPCEZRmON6z7l1XcPNqgk\nZW6NX2mkKSGd/uD6MN+QFD/VUbd7xBDD/WPb5o2WgeHbrwHMcy+rej8qSdle\nrHkjN9au7PmHgP8b2BUIZE7zmdzh3dbyRJ3s2QGGdRgKFP5Ex4XLlonNR2hG\n3LDp6O0+4h7mayUOxM9BT2UQNIlKFNWglmyhr/gm552KdUw8Z/2kkKSbhQen\nzzlP\r\n=Qqsa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGzoODj877ODZxyUWUtfWS6kml5SY3w1CeguMlBkyV6GAiBAyNWt37mfJ7L1x+LTEkL4PMnRrhenkCxBYyXZ51jphA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.58-test_1566938868010_0.25641057200948736"},"_hasShrinkwrap":false},"3.8.58":{"name":"ts-toolbelt","version":"3.8.58","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"148c946b6ec00f9e894fa375e98b30eceeecc6c2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.58","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SIkymizeSdcDK4JeQYyoJ7W6OksReHTnV177yFWYtke7djMJBlnaq4e2r5ygcM8wvlcmFeebezo0pqOywqim2w==","shasum":"38ae702687795d47ee6acf2a968b3c2a509ab75f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.58.tgz","fileCount":202,"unpackedSize":175750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZZfNCRA9TVsSAnZWagAA+U4P/AzL0QsN7R8pmiv5NAER\nNhFOfSqGD+N4O2jg0PM9Ur0GRY0bBVVq1kYw3qRe9xTXjoGV+JWS93ItfNOu\nZyO6WqYbimDRbpUasBw+hyFsPr6baqQge2x95dZHaL0fT0h2W/rVXzZAZst3\nPtQKO2a8cx6yXoIg2xjOvplanJC36UbzXVXLxzPF9wT0EzeAz9tbRluKnsnX\nRohBAIuZuzHLV2beL9rcP1+YlXdhOWKjAktVPxd/LcyMzqJnjpeLvX0nM6Sj\nokd/H7MhoEeEtwNpKisLUpDJbfNrNC7ACwDLYbQ6KGZ+SnMMM12VU0eG05ue\n7+tmRivajjDC4kjc6ZW8j+DjCK3qQP+83cTZZzxwgTCBAnodgrCQEnM6SjP5\nSIXi38t1X/O9iiNV1pPPLcVRp8SmECZahMIC7dURHLEmAO7w1SR4c19A6AkN\nGUez092ZFTQAVHlaHdljyX5+IzzwT1vis7jmOKWneFgUQruZtzIdJ5U0Z4DP\nCGp4g2A8CsJ9mhBAtIKs9BXRYEQ4CMRxzAbBj+H/Bs2mEjGouE0DEj13zQFb\n+xKkktZ1rsBCmT2+30SGopaHXsN/ddTERwpoOfSzmEWqq3Kobr0rAEk+UR95\nt1M3Lou9NLgQJZZZPd3MkpWCpENeG/hsZMDSf9jlrApVuF1XyiUwKJEMPjyE\nAt9N\r\n=bYBX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9rMPmrP0rzA5W3jPrLT8xKOVQFoZs7ULFApGytYTydgIhALMK57oNNlaD3JEmcjPgDhJww1c7Fy1Dpqt1gS3U6bYu"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.58_1566939085145_0.8780155207161793"},"_hasShrinkwrap":false},"3.8.59":{"name":"ts-toolbelt","version":"3.8.59","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"148c946b6ec00f9e894fa375e98b30eceeecc6c2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.59","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-pjCfI/A0VE/4EJX46ANwUUUl95SpSea7phOlHUKEfBCy11R7P1JDjV21VGWPxcfvsQhVi/Rn8BL7rPzuuPui2g==","shasum":"4618e53b7521995b8bdc2e268e35204cf5266d2d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.59.tgz","fileCount":203,"unpackedSize":175750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZZpECRA9TVsSAnZWagAAmdwP/14pcxH7dRQMcn2i3jhr\nlqKKlfmXMeIU7Tvv3yvbe/DcU63upaAx3FDMGkQ3R41ljQMDGxowZEl0RACk\nlBQqdTF5Pb/qXjiImTWOm7pejuZ/KE9KmhSLC3LZ+VEPreWDfxOratyIwyOD\npveTghLtxILsjA5RtdmweM3rP9uRVl+bl6QUf7ZcYSy1L/cum6yy6A5d3XwM\n3CsOKjuLftc+tp1TBNrq7EeyEeHT1W0hGvyv0cIpXNA3h3iuRLcleuId4Ilz\nLGVK79c+LwikQIn5I795r33noZgqEHoaUFmtMdfZO6FRwsBQZ7982KuDcC81\nqUc8SsO7WHPbZBJ7cRLUOf1BE4d2yzcX2C0QHUezpsCCX7Vwh6/2Pmpu0WbN\nAqKqpMcT6RgxgYdUl2V1ihA6gS6+nx41Y+2x9tvN9uwxErhkcy05JMJ009Rn\n65wWBb/e7aG4fA+2MA83aGLnWKAMmvQbgD70CS4J2h6JIZyWkvFL2Z5fxskM\nFQ7bAyk99W14EzYfcF+e6Dk2OdBNRbFg7G2Xm7IbsmHUHzkjsgA4jdubsznh\nRq06V7wHQ2u9kUt1T6POu0MwlccntBGqghbNEu+oAK88SJclbDvXpbKn8VxV\np2xSXPawdjgxFFr7C2ef5/mGMINt7z3fq9gXW3bkKzJdrJmZ9colHDcuGlp/\nLhXL\r\n=YC0K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyK2wgawX6sXa5s9UA2xEfguwXppqMChKMR2ir3ylRDwIgQUnVbEZh6mxsTNxvSlEmX52+rHG3WDf2lcsP7PlwTqQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.59_1566939715338_0.9098712839346212"},"_hasShrinkwrap":false},"3.8.60-test":{"name":"ts-toolbelt","version":"3.8.60-test","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b39f182992944e93887638d58974157ba6872402","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 Higher type safety for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.60-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bkQ9y5mWbFtH3PMA4E7UNzXq2qD1/2VRpNgIoS1byofB0q7siN/9DOM97CU9QakabGS4hzSh+FKcqaTzfLtx+Q==","shasum":"65c369dde28b70097503bb1198ef2c9b1aadbb8f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.60-test.tgz","fileCount":202,"unpackedSize":176041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZkvUCRA9TVsSAnZWagAAzOQP/2QC6zPVn7u6LuWUo7Nc\nskbqzXr36SjJbNKLa83BStZWC3jysSfeE++ttnt5Sr7Bdc3fEw2N4h0SbxBs\n1gU3gDn72g/4vfj68stS3rtO04vrjM3h3sLrmYZGWcgNKcV2XYQaJO3eBsmI\nnvwn2nkQsD90Pz3I0dAIHzXRp/be0p69a+QwlXuIXm8GYxvXAqZVCfCYleJ0\nxI1iTjgu6ynshDxx05s3F+8ECX/3hGuC5zEUjk4eg4a/WokyKNqUk0PPvpr8\nPaecXJJCPgrbRcB2BWC1heI+lH+2Sd1o0+F1PK9sVGj+TT0UXyaUmjt5VXtg\nu4D5uzQ9QftAQHw9WmUp5zMJxk3dhr0/QV6dqgZt/dJu388nhisVVrML7BH2\ntn4zlaVT/Yym28lXLNEx9xA5txsEaOdxgFv3jM/CXClObKFZl5AbAdQSqCV7\ndHHEhl6sKcP/w/QxOaYpTPviJDyarEZY2rD7yjxN5JNTxifhbPS3ZTD+m5gr\n3W6gIQVK+ac3C5Yyg38cKjB5xamF07PtWiIYeLhlnT9ZrQhJtEzJ3S8LzcGB\nOS7/6595+w2E0e+DYLlqfCvj656KqWDYNWtiyOjoZjpqk9+LLZEbh03up6ao\nmrCzz1EBzFTMQLRTPTRKWHyN4ygdD0yCwkczcHaMDZutuiRCSMkYNZdfUsKt\n1RvN\r\n=tOaG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSrvvKaxUwFIXaXCEcIEnDl+0wCUs2DNT8BXKlz1SEKQIgRxXinotMN/fg4V1mCmE0JFOCNslH2BVWeR5yfTKpowA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.60-test_1566985171960_0.9275416416166833"},"_hasShrinkwrap":false},"3.8.60":{"name":"ts-toolbelt","version":"3.8.60","description":"👷 Higher type safety for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b39f182992944e93887638d58974157ba6872402","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.60","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-TUjLseMJ86e8sK3zAXvF6xEWrpRXsUUPjudL2nCvtjQu4RTMUSm+491OspLo2sU4DWkK3EMSNtxUvQatUyYllg==","shasum":"18ba3f61f1cafa4bd8fff65435fb8661df000052","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.60.tgz","fileCount":203,"unpackedSize":176036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZkzACRA9TVsSAnZWagAAr2oP/iiXsqbPgM8xk5Z238Wn\nOxfG8nnW09wezS/UGKCnI1J1mL5mzDmEpphH8Wl7wO0vUQX+zKCmlldCHJrl\nfBCwWVc94v/QTWp8C9Qeu3jjOkCmx02rSZZVenD3v5zHDoD2yxNtXR12B0wR\n77Wp5UbAfdqOHKWoCwOpH45x7u23whIKl1o/DaTR+xQMs+J55IvQIZXuIOwN\nNp4pRiKwzI1iwJyZNscLBMo2xAoVFkO99sJJoky0MXFJie/qC7Wf76PiNz74\nOzB82tgWLcV4LMWHe7JxmZdxNZzwP3K/e26X7sZ+I4GVmfhZPKIVxJvmF7/j\n1LJ0uNwqikN8mL/vCxE5HupAMzlwVTPCakyPH1MIqslfM95rywjk5JLqN7PN\nRBY2KmegwK+ISpx2Ee6LpcjPvGQ0sklLqLvJghnFCwGpe1Fn3DNklj5meF65\nF1/Zu93spbgBVdeAZmGDbI5rd3mzPxKtNTgirJpnHGfAZs1oHUj1vM1iRsDX\nUWYac0zuga5dGnvtVbGXEYpsb5EOcoBxC/LW4v8V69SpKMwWX0KwfeMFd1P8\nLfNCJRohwNmADlepBLByFRwdag9N90Yuopke+yljn5mUcbfGhCI6PDMto71G\naZQz8QvhmiCCQKb/C75qo5U98AXFz0tsgcWUViR2CkV+I/VrXrQScyrHUFoB\nvdNS\r\n=lLtP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWd5ywHTdDDLo6TyEhumxSGBG1hMm+qS3c/8QXwAA2XwIhAKQitu0vwgbhxDVzfCQakL3CEbqK7zMGFjrXrPyiX7dz"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.60_1566985408077_0.05696202484142665"},"_hasShrinkwrap":false},"3.8.61-test":{"name":"ts-toolbelt","version":"3.8.61-test","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"f2997b96cf8497c4d84915bfc430dd32cfe6e985","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.61-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zfCsDNyRlQ2oUwZDm+Eo8BtNpiFM6BxKY1ywHlCJMmMWaENz/Xtn1Pb+ege64X0tOPzOpsMhxwLtMo0QmHmdgQ==","shasum":"6a52b8e791b616dd7b6b5b490621135f1cf83c65","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.61-test.tgz","fileCount":202,"unpackedSize":176316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZlcYCRA9TVsSAnZWagAA6AcP/ivxFfIZAizP4bv8xot7\nM0VwTvLSgHup7uuFteNahQi4YiT961TKmu2pmFuBq7O/KgCICU0or4VKeNWq\nwUNZ0zclGtjAJO7irIjcJ1wbcdD1gylGZ2RHg3Im09GlIhEwSS5d5GYUjdk8\n+eU7PANMuHmlNhJCv0CL4Xs/mjaDtiNNNx8CPT39r+coP0uAFfj7V4F1i1ix\nZah51C5ibHCvA3CL5oarmx/9IWAnAiIIH0PbF4v78MkC0GvSDf3ZS81i6S4N\nZs3QCOeXUSfmfmZ4vJXaSETKSukMHMNvPHJYXabaGdr/uCMjSTqIMI3cNRES\nqZh30+HZbgtiRUX2cviSOf/MHAvafD+5yg9TS7mx2ZRIFu2erIU3iz6SIWZC\nypFMN0EK5JR8hDD0WReyo8sJwOXmUBExxsXgOwX+aAl1kGxIoINcnQf3EVzZ\nvWoUrx6PfDCykDjQ5A9ZQkiIQmVw/ghssNYkZhqxFJrzXkTkXQGx2tDBp31f\nYJYV4Guctr9Vg6LfQoNDz2N8WB9iuCwbR7qrlOuZdP30OIMTNsRG42etHE+P\nqg8FH50UV3HTfK39zg47LU2lP8E9oizdtgPhghKJ8ICaXhTGUBnCForymxiI\n70YtQl6eZMdfRC4D/murckvjotHLgi0Zp2hQB1+Ecqre1KC7I8SbTOSZ59oa\n1z62\r\n=SFA4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwTPtupXijrw3O85K4vZaEzl0O7B/iwoa8+ZWqHIf3FAiEAwblxtC2OJZxwQalpfz17oYBVxXRdfpSem3hiONNoPC8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.61-test_1566988055877_0.5305480547941939"},"_hasShrinkwrap":false},"3.8.61":{"name":"ts-toolbelt","version":"3.8.61","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"f2997b96cf8497c4d84915bfc430dd32cfe6e985","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.61","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wNMADkBU3UDymEw5Vr3ivH3n3ieOgkhKseNCi/CGDLVQvaXpyTOxWB0ayM0w5nw66doYUsAiTH1y52e4n1vuww==","shasum":"999f86f782414f77b314386d6b155dd0f10b7a6a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.61.tgz","fileCount":203,"unpackedSize":176311,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZlgECRA9TVsSAnZWagAAloYP/0MSB3ouj1kJ1XhZjiQv\nlA+N81Qp8mjvM4TDfA2MyFO5Y4YENmrCBnz3+WXkZ2a4VBQ3wyvsg728yeER\naO0O/WVqXbLO8MoX2wLB6/NEwvYDKtwg6L2AROuJhNDeKl1Wh7S0woEJW+WZ\nQdGlwucNl6D2SpS+CPCDR/YoNh+2Nk1HbNe81ES95DQOY8TH6kckv/kOFc03\nCoub8yKy1byRiFxupPEHKzAo4PLgxi9puATayA7I6tm1P64xmqHzyVusBxQw\n6X2zBSb7O3PFOUjc+rOxt14JFBC6goOLTO7nuZLbrfzNHm5L4gVvRcjxD61w\ns95tJlaM50KHhRqog3bZGga88Rj0yNr7jbdTFgu0DJuYgS4VP+1ehcwUGdLs\nmklQRy1Kqe9sXyYiHiaYNKckzwBenqKHYuU0S+dcm2tv8G/zM9duT0/sWBnY\nWArYyjee38Bcq5ZVpAOpbr5uOPMm719uCXkYeSyuz2PekOF6jJVFxUfRFmPm\nqQqhoRxZWLiwkFXIxH4gmCcd7BkgOehw5iiXGOn21myW36bLa2YgC8sNn9gr\nwtyhRR3CFddMVIie3CS8ONgcm0ps/vXCjfZYcXjpJyFmWBapOQuzsk9XCRRb\n7+RB1x9xEc3g35qwLbKI3Qp4fa7fa39OTHlCpCq+sruMtY4m1Xc301ChkN3+\ngl22\r\n=afm5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG1fc20AAA7WBvawX3fObECcYRpHN4ZOdUqLJ5uG14XCAiB5hXTz/WDWgmHqnhRJaV0iX49GUy/nzESic4RWQjxL3g=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.61_1566988292262_0.48264325730205737"},"_hasShrinkwrap":false},"3.8.62-test":{"name":"ts-toolbelt","version":"3.8.62-test","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"3da6adb13014b06f9a5141073203259fec7a8d51","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Computed types are always **readable**, like if you typed it\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* Answer the question to \"How do I do this in TypeScript?\"\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.62-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GF0COISWf3rqYH5Mt6Zjs7VZukEpotxEa+CPCOq7304tsIZDNSw66e9GZrxg6lGy0IXmLTACBo7UCtqvKy/kLw==","shasum":"574d82b97fdeaf56b81396e571f08c3f1aca5b0d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.62-test.tgz","fileCount":202,"unpackedSize":176677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZqEqCRA9TVsSAnZWagAA62MP/AlNjAXlLaKD1G5Tkyi6\nG+H43Ekjp9jvoOOitRfXJ1Dfrcw63AF4wuWWdGSjjeSqwIosjRhFroipKbk1\ncMiToImO/Ey0Vl8WsQZr2LSdO5uqArnbgk6tP8Po7vi+wqrDNkylgV/v53YM\n9tmIaL7wEh+WbfpLbA4rp5X+RYL7CPy0pIdWAl+yVq9i59HQArlg0zFwsekm\nGHwEmJMsFmBev9FPlVgCxiUZ2Y7iuiOPerWkg3NTlCljxgU6GKZLrfS1ADvC\nmhj/VE/MHTY39vcZMxFJHFlKzDzHg4915g6db0QUdio+a1eT6jEkVDtscKm7\n8OCcTCFVSTZKwpn/b7WVdFnobP+Ur4T3wlHIL13k88VH5b6P7FFP8hACjmov\ntKHWGEJ0ub0MmesHV+8fidfEy9m9d2NYlbfuhEZAF6pNX5Z198kMSA+3hcLu\nT3fl68E9mLB18uoBhA53mtchnu5y4L8nOSO/4AXI4JSTV9cO2iEXSUwNW1Yj\nOhIL3AYIEAAEbP9AE9BGsofd13TSwfjjuL4ndviEN4Pu0tsA/zccslRwMJJY\nYXb0H9MVjTk+WiQNRcWVbXKs8NrV9ousa7V9EJYMArUSySvpq0onBls9X9An\nzRILCjS6SxAMaB4xMqJ1qrZpFGhGeFfkPoOUItXitu4CvYh2a2ZEJ1yf92Xp\nzbcK\r\n=t3YR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsTnxL9PUOtFsD/aQWSgh958/6YgjOOTSiNqcggHhATQIhANaSBhKa6CrGfLIghqpoxOG7aXtzXRCSGZ6D2dLgcKpf"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.62-test_1567007017535_0.3420384618441732"},"_hasShrinkwrap":false},"3.8.62":{"name":"ts-toolbelt","version":"3.8.62","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"3da6adb13014b06f9a5141073203259fec7a8d51","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.62","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-C5M/ZrKIqMCRl4XuSAgvZPLxjt6OogqdLPSDnJh/hQYCTmXVKC4s9ow40AaYrdx5e3PPUTPK6QoEKUl+wvaTPQ==","shasum":"9f7ef2826468166e01d1ef677d984964df8925b5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.62.tgz","fileCount":203,"unpackedSize":176672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZqIPCRA9TVsSAnZWagAAnKAP/2YPUa9WXFm9VLI0Hshz\n3F0Wgd15JancbIkiunb485jqEpzOCOvcoL6DOCFA/hY+8ne+N7GoKGJc3fda\nL+vgvuU/j/gJD4W0jW94lmVVtEGMe4Ahgqdug6O3hHSu//cVD2gKfU2SZLmg\nH3sQYw4kE4DgQwdn9HVgTH+35c4kAzH4X2TRhLVqSjYstL09WvM86x3ahzyH\nlyru0EDc1VYr55j9QZsNnA3HOd8ACDCnqgBLiwsFi+RIgM4O9doWtRBH0hjq\nk5bAElCOdTCOZjk3dMLtCENvqPgyBbTn1P7PowLgk402RL9nbjBIHwFZhumA\nxzHKj+uIVWW6eWKdvmbI5I5n5Ctv1+pbanVejqZPHiSTTC5oLfJwOqUflnuc\nmTfhDk2L17E1FEiVaAGz1+rKXHJ1aZee+RUYeBM1p8GIRnG5tt+YnDDcZ6MD\nESzXJ1QdYdUT1T2HkM8ptIyiVOCLdHoevnjkZBtpJv3kuclDyK+1cdxhz86r\nbzgO3go6s/gmjZVABmpFz66keuXw+AVRdxa+fggCROoQUEGwvKkJDIKyHU//\nlKWwqKFpQZPmZb9iC10EU3T77Hnb8/ho3NUYvurXCOAyZ8ipjCZUUE1Q+3NH\n2EIo3zbimHw0pSUr3HK0qNMxEdvMRvYRYvFWa+wwaOhx2OlvWRRrhHiC8JhX\nS1+V\r\n=qFVH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDD029k358HLSkYOr5d/PiBZ51S8VuQIkJu2Ronbx9kDwIhAJLhfR0TzEbUknIApgAXvL7SQmFZETEz+/0dq76qy1Pf"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.62_1567007246274_0.5404954270651001"},"_hasShrinkwrap":false},"3.8.63-test":{"name":"ts-toolbelt","version":"3.8.63-test","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"2c0fc0f152d55a51b5c91ec9b8946b19dbe2f68b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.63-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-IGVH2DvCDnDJKym7do/2yPV39yZa6T9QEeY4w3g45BUUEuiUrcfGm+pZYqYXP0HV+KWw2ydfH7wX2/DjQLK0OA==","shasum":"6a3cab292d698c4ef398cf4dd460573099c93822","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.63-test.tgz","fileCount":202,"unpackedSize":177902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZtilCRA9TVsSAnZWagAAh4UP/RCEfdD9JWRLmFXjKDHi\n9sA4ROXLoZCFuKlTFonVbzBXzhy23X4l4DUJl2WQBd+6atpciCJqtphrv04U\nTy1dK8AB7pxtea3H6/0oZKZlnBFYOq5Mnsa/IJOxwXZ6JIjOWB6Qi9Ok3Vnw\nhjBkxAAN6e+Tb1W9iXZzZMD4fZWOUE4FvrVgLqjai3sVL+qNKL8jLdXPQApv\nP4arsIStDlH3ns81w0wWp3yjKH5V9mSksxzTHPK+nkFf7Ro4p2IlN8nt6Gn2\ndDO9vBWhO1qQw0pFAynYGV0wZzNOuMlnX+HEIfGA0HZy4B2wphZcCSMKZ89F\ne0uYTFJQRTbDPgi3FfbwzpNN5VJeXlsMCXKmfOiQXMhJeUhgXkBTWQ6fSqfr\nqiDh7Y9kkBB4rAj1pbp38WnLu3uKQxdoKl0StQpaBHmAFxNuEBfe98XSkYuN\nZppn8c7NSDKnuH5kMnMB2cqL8OuKgKn0z+gecLd6+h0BKkrWKh6ScVJe178o\ncpTz/vdy6URgBvQSEkoc92EOoZDEtUNV4RSrN7J1bGdq4wFxMnddZgx7QaG9\nkrCX3zfJ88DLXzndel0PAAWDzm2kyLqi527yBchUXJ6etjNDgmbwk1P4Z3U5\nHkzu5wlVRmHLGGEnSSjjXzBFUqcYZ0GpyEVAt5/kFzw3PfLLWuGrJR5LhOqU\nqRl7\r\n=W0xC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0mbGQPaXgUOxqhMbA4bSkOtods4+L/nkh2f08hKhn2AIgYsqwtgnwXfgQDdgXJGuKz0jEwDifACZvKTtWRObZ/N0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.63-test_1567021220430_0.9454248867523496"},"_hasShrinkwrap":false},"3.8.63":{"name":"ts-toolbelt","version":"3.8.63","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"2c0fc0f152d55a51b5c91ec9b8946b19dbe2f68b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.63","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-OlsFC8uF1mpN2O7DlvSkgnXzOvubO790eFhTvZBFI+WLge2BYzkQk73Q3yF0R8usxhkqbemLomqRhCGWasoIKw==","shasum":"ee5a94a5d870f437bc6811f7428ea24c78821f6a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.63.tgz","fileCount":203,"unpackedSize":177897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZtmMCRA9TVsSAnZWagAAqesP/RqbdNsBA5PnJzVcfdYf\nf0Sw9BSGI/StjvWv4S+PkqoqzcqhwR4ldseRGK8zj6iIveECqXpX/R79HkVb\nfltVj0pD+pfUdpa2m6Fr8aOzqzxdTxq7+aHao6fzpkwuWbx15GNnxSwMpR1y\ndPqOqGri6Pn3piRIgdtAkpn6jrg5ZUnk9GuqVhkJwD80BkNU4bdmyNRf6FTt\nWNVjhNVPuzth9L0/2NeoE+WLZQbz62pKnYM/qxnH9XSakvfXqbOC90e3Cav0\na34IXNfkygoBrORn7dRD05wLh8dnzpZQV4NPA4JEwQWscWCrxk7U65GnSjc6\n/y0brq0YC3KTSXMrDn42gKUYAsIiWs0+xDoQQr95+OlwwYMC+EH/jESPtFLB\nVNTBkJRo0o05tzUW+jBZdEBIbYFW89clXuvgcX6jwFDjQ1kx0n+nFDkP1Bst\n6BXZ6l20mYpQ9vYtetb4zyxd6DUt9xJih3eN1Nv+jmv5Njc9wv73c98hkaum\nbDNKFLksN3OUutChOh7rUTBaTz1HVF0XNiVxJKDP7ukfgQlC2pDapiaiIF1m\nBpVPQQ6U5qLNthq3mIzarCjWWgAUtpDxwVBIwiUEkVjtEJ7/7xjdrI2cssSQ\nfpQqxJeIFXTXiOSx9nL3jUFRusqo46cE1RqxnpRsbOL1m1wsYIhzMoVpHYbe\noZRc\r\n=0Hjl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCpa3mveUElzc55r2W7huzwLR/lgjesusc7J1g4hcc0AIgQ8K1nWU/N/NC0hiHwmO+HBs2R+aedt33MXxK2RblshU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.63_1567021450690_0.7421832960885508"},"_hasShrinkwrap":false},"3.8.64-test":{"name":"ts-toolbelt","version":"3.8.64-test","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"bab8b29e1eff90bccccf350b884baa6266b3cbec","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.64-test","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-CZDzeXiaQL0sQMya1wNTVkeCIB480EeLeQlw4YQLZHXINJSV3YEXCLTyI9eSspTYeldGnJ9mjlwY0zc340quDw==","shasum":"3d4c810f91af30419ddab19b84bef20db6293989","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.64-test.tgz","fileCount":205,"unpackedSize":178985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcms/CRA9TVsSAnZWagAAotgP/jLfjP/uuJFj5pJTt4Fv\n3TfK5Pez9bWQ7wNpvPVMgZDfh8CM4tTjyHB3P4b02RCkVdBVXC+3H7EwDo/g\nWeBJxZ/jqln3exnsttrI4FN86eqUIgwyDZzj1hLGnaO5mabLSKZdO2OqZhIF\nTaLt5soCL4cNMjO1GhkWsfW/tBwKMVgCpSXhiOt1KI4ezPnWbC8iY8AYwNC2\nTBzVzqj+eJ4vYYyLrVu+2urGlegejTOAV87sqb0/RGTP7olYGX12MfU/bcrR\nMKyR1ot8wXeFNLQ4Cvl5EuvLme1pIgHr7QunSUbMiGX/JgVgkbvV4HAhHmUq\nEPlbkUwTKI9CCMRWFNUx6ZaXSAprHIJA/o8puRMkjFqiFIiWK21Ri/0A3+kp\n9836btrqHdrovGDzwGNx2+oL9bdsgfdJvuExcH6/G56U1F3FK1vuTueDZ+XF\nxpcUUPhV+0WqMeO+FYQpnmovGXP6/+iMiRFZTKfQy8QuFIhppLMEjvDEioJ9\nwf12mtXgehssZfalCkB7i22J5geNuLuz+iA7CZGs8QmAvtItyHgyMscu5oe4\nK0CI0V6mh9nMPd3E7rdrqWDhTPUKQ99CcWPTsANYe9ZSDsuwLSjIdOou+/9g\n7jUmirhRjN1hzTAS8f5dhs3/6l5E8Ec0ffbSTabIKpeD4a6pJkSbMiSTZOIS\nhfQI\r\n=lqIR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQOVUaMa65smlY4+VGi+MvbbIqJlzCC4rBZfpFo06EUwIgZ23QSxt7c6pU+jkqiRuUBKb3R5t18IylDVFUco6AIEI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.64-test_1567779647024_0.6951824141853575"},"_hasShrinkwrap":false},"3.8.64":{"name":"ts-toolbelt","version":"3.8.64","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"bab8b29e1eff90bccccf350b884baa6266b3cbec","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.64","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-PiQXW1pB6IchBLxzsWT7h9zMpCwPB51w/1+sywacfwlN92SHc8iSRKQPIi9qKAtbRADsUmAI1tL6gbN1xblVsQ==","shasum":"607417f31564947a975a44aace8b0aaf2b637e06","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.64.tgz","fileCount":206,"unpackedSize":178980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcmxDCRA9TVsSAnZWagAAQscP/0g1EU6G5CKjBMC5Qg3S\n96Eev9UfQ7EcGdOdIVQjjqdT5iFe2MygU1LqSQSZlp6JBupesJcEXgPkKpM4\nnEqjQSW9am/gtSSgtZkLLXSj+CSqi7NtX+egiZX4fd7Wr3qmiYWX76EwwJp/\nTdH+FriUAqSe67IRFBm3mTtLlfzJjVEq+nLFELs2JDKVYAzbpUMEJmdgQ7cY\nfQZ1TpzUxgqxJr3ctP1s+vRfvL5jr+zsa2gRfCHjVUtkpvGPeXypYl3SW6Ij\nxEvj+xH+u87WkEc96JNuoLDpqMygniqWBwR9opvTkXy1EbUL5mRLEmPcOZGF\nxVTVRAbmB/IbhFJprIJIYE771dxlY/Kkr14ouhPuZ/aBlOEL76A82o76WrLp\nrW4HURIkADCWZ0njFguvRsh4RVrqNBfdMzkr3LFJTKnkrndkk98+qrShOoe4\nBH6SPOLG5u817FymRdN4+IkSWZ1eSOPbd2T7ckxHo6sojn6625z38SWYdY7e\nJdMb7seuK2T/9UbpcGTN9INja+xRnwKmwLRzi4sir0Lf4EpbsTB2txtUGyR2\ns8rnGaVFp8WEFLkhLxO+Hm6d3QBF4ZyxjyR9ikQNkghghKdaskQKMan6eYIr\n3pCULmb9XCPwog+CH6AvA5C7iJWc6MRZfh2ZDf0JZNnDfUkXfO2sR0va4ojW\nNUlS\r\n=iQsi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyTHrXSLJY9px/bkeiUv7vh15Ph1KO7MT+t4k2e6WMNQIgFM25eyhlCIPG+j33aWzoJ1rue4QymkGj4NUSOW1ExJs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.64_1567779907102_0.08012192042326727"},"_hasShrinkwrap":false},"3.8.65-test.1567780648003":{"name":"ts-toolbelt","version":"3.8.65-test.1567780648003","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"8505e3b274695c5985f40a24109de23edd241c28","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.65-test.1567780648003","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-YiabMDBE1+7a1Dy9NPaDfYeGvsx2eL535J4QpBk7V9TbWQK29lkpU4nIxcpO7oHgsfXgS8KRDn6aaNZwM3pgVQ==","shasum":"4c8245a40b982f2946b316ec5fecc5611fb11b5d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.65-test.1567780648003.tgz","fileCount":205,"unpackedSize":179296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcm8xCRA9TVsSAnZWagAAgfUP/3p4xUwWQ8uukqDtLBtC\n5xLE/1yQ3poGe68Xgaow+BwhlWyO+JbFhsE38jazubJbdc7G27Pc6K5yqqfd\nLuouqXj6hjhHwD52MlLEFEYEiSRI0EXI4SeHzOdxH8Z0wo8fNIPxrY/kWNJL\na8O3PWtfLRfZbHAv8yFEfNCSvHrivJMwQa86CLBX0wIPm4fZ4HP0/H6rUy5B\nj5PnXHDXm1qtiH8Z9WmWotaxUOShXTjwCMSxVQOEx9EJZ1sA0Esc6jBPqHYL\nkK8OtOdjONac8IyaaF+V40aW26gY7wlqtIx8vO/vrsoM7lsUxape8XTM9rWz\n9Rj8JGDmEzAWnTzgfmleC3P+ziiJUokmnfz1Hq25ERG2pTsJJMfDNeyapoU6\nfhM1PGBTbYzdCgcGRNpXu1VkFv/lpgAPcJ13N2HOxRu6iaf1U34FmBfDNPoW\nfCztB59g/3VdVWfskduIj1XQD1gA5M9stcyBlIr+7ndLnK1mTwLWb1IpFEoR\nUNYN88DCMnHE30H2LaSfcaT+hM3nAymA0Fui21A/dodAKw2nQM2RQguCuXFX\n8i3baeaKy8bN9TRf2cR4wf4XV+tswK5+OAhaq6HKz5h+LUw5eSS8cNoYAAIh\nWUsQP1WVltrwmWj3AGLKyD0a3jbtHsdZWd7zNMcZTZltORYYGCq5euQyLXgJ\ndF02\r\n=yHy5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDG2U2Sc86oluL/DHtSfkoNE3QHedVspoTTOSFPwlw1pAIhAKn4aH4x7PlNXhZtxrxeFgw8EEdUJU52qcqIH6TL/r0/"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.65-test.1567780648003_1567780657110_0.24265827692666586"},"_hasShrinkwrap":false},"3.8.65-test.1567780659494":{"name":"ts-toolbelt","version":"3.8.65-test.1567780659494","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"8505e3b274695c5985f40a24109de23edd241c28","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.65-test.1567780659494","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-mDPf3MNJQOBMuC4+2G3AFLszHui9bwipJmnL+9QzFqLBP4vJSeuBm4oDDfYjv2T488Hp8aN6u4Y5//RQnmqzGQ==","shasum":"b58d5c52f2e64b4c383e8dd6efac8e4aef91d022","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.65-test.1567780659494.tgz","fileCount":205,"unpackedSize":179296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcm88CRA9TVsSAnZWagAAg/UP/1/tClK0GcnFPUq+46jH\nzGlJQtrIVOAW9QaBjhVo54Xq4FGONRup5xHx6xsgyo582x/EfU8bi4m54acN\ncgpcF398FqDKzzmUvOmfNGOu3GkqI1nt1P3nZNIMQAqCCJ44IiHwAlYkb70z\nX3yha1NaDOJQ4Ha+AAberQOb08MKZnJxvsCu/nVghsFCxYsAUEHQVdN47y5k\nmmbHONUHvDuS/8XoM/bvJ0NMYQPZGSVR9FvVCLvUgYr9ugMBMfqdag2AT/va\n+sCMvXm19UKpcjUyPm+ZzAdHOAt05EjHIRa3IKwl3pHjahd+QtcLRatGZVrk\nk00mqp94AEHI5sgSqVja1nN/XOUMBjUm6fca3i2f7LXzoBm84Xdml1R6uosm\nDZMDJgaieDVS8FW+lCNkHVSyOr9r34zX0IBRFSj+RxJayY0fgdu5IKdyzX49\nQjdiy1EjcVm8tuepsQqdjky+kqIpGEOVaZThH99yd7rs7/vthFNvcVbxDBm2\npKHZc92Jot/OUU+jkyWyRetfOhAfRxWSHnHggJPhOLUPtzBx9EKdvoYG9qYe\nT3Qb7H00VblXq+yz8EX46I4ngNJESano1MWMFVDbR8aXcAk8Jof81VpkKTF3\nl+VMO4bFaipFKh0bhYZRtFsSZcx/GvlrUVW346n0HvBNYHJWTp3HAsk6PiM9\nfXZ8\r\n=M0Ky\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzhb80s4jMJZ/XxaBCzRkcezlhdzjrB94iVJxDvYLWOQIhAL4FNFSqm5vhes227IPtlNCnIvqMmus3ot+YE+AssZh5"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.65-test.1567780659494_1567780667802_0.6400573911184995"},"_hasShrinkwrap":false},"3.8.71":{"name":"ts-toolbelt","version":"3.8.71","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"24b96f3e68af4692256c62daba24ddb6069e2ade","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.71","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-rLUb5dmEdaZ8IUQnKWWT1JBce66t4HjbsndPGblCoyZgn6ExSQ2+TSaNj6kkaHL7TlNTsTXQyHlZbdvBklaZWw==","shasum":"1eb82fdf7b8554eb971b0cdc267e3e57268789eb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.71.tgz","fileCount":205,"unpackedSize":181298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdc4jdCRA9TVsSAnZWagAABIAQAKM8mgOFRKkJpcebcjx1\nGTbwyxDMRj0cj07edEy2mf1hAxJlsLE4BfV+0zMIdyQTT1YRHdw6vKCpmcUP\nHu27VznN3y96vCeCfrgj+LtJBbw4JNrxjiF/W0detgxZ1pF91D1ssoCZWBbm\nWVs6QZCSGjtrfwB4kfxj+y3+9iI8tBlrB6sVxQXLhHMwuDR67fuHuVblFUxP\nDfPXY1ajwkqIAu1grs9EQLqNvkLdlAUTHNcsYMw5K71wIsfZAIpzXW87LN7q\nWnTXjExAQvHMioWHG7nsPBuKn0CLIj8irm9OZ/D9oP65dxoE6f9gG56G5RHX\niTtStyTAJnXqMfAbOHL55mC9VEPKZpRoZA98JXb0WAG/h7Yl/pb2qdrZn2JT\nBoLulyZ+liDHdH2kPLOd3pwnOoSS0DfAI9vsttAvdF9L91gQ8+sto2qXrUin\nurmevupC/7fjSSJU1q1kjuY19DkwJFZzSrsriNlRoJFicLSdSGWY40N3o9Ji\nTedfgJofkxh6nrScwf9FG45KFQzKJFeQZN7W6ef4axQkk1vYxqM32PAT86kO\nLa66QB6MogI6zBxt2aSWG6A8+6mh2j/9+d+j1DR+9mmQiHzJcGbskLu2xDOe\nFjRqfsBka9SYdJigGavfiOrUm4kf+FyuklWwAEozQKgCrGussk6YU98xSL62\nA1Po\r\n=r6+g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAWPFccxa9WsQfjKF6HRFZOhBTWVadyxEd2Sz7nLCu3+AiEAge9L7QaWR8ExU15+kT8W4K3XN1fifPxPO6xSey9Xrls="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.71_1567852764462_0.48784968831362696"},"_hasShrinkwrap":false},"3.8.72-test.1567853852124":{"name":"ts-toolbelt","version":"3.8.72-test.1567853852124","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"506b011f653c406e3aea65f6c53f6539c43593ba","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.72-test.1567853852124","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-m2Mq/VTnUN8UUMqu+zfk0L50Nn6kBhqXGWymhSA4Eoyau9DioFTmnyIItzIcfb3Jwx0ypRHw5rIZ7daC3CMyMA==","shasum":"8c7adb525acaf8a2dc9ca6d5efe3281dcf5e35f3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.72-test.1567853852124.tgz","fileCount":205,"unpackedSize":181660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdc40kCRA9TVsSAnZWagAAXFgP/ibmf46blC54Wmzb5r53\nfK14Bkcozl2BslDOC0sQZdq4HedTkPvYa8mYqC3ROcEyrq6Q+dEbUThegSn2\n7jDdvb5yBBf9xKOcZSCYR01k3rB/OMVeKl5bQ5Gpq/6ve1cGFg/eylf4iHJd\n7yEc1hlLLyYjekWZeYW/0YWhLF3/ur8UOWrDbwdIFiRnjWpp1KiQitTepu89\nclBXf9JCZtoh232ijkj5JUH/bdJaffTdvjFwiaDbwARF8eg9dD01h6OuqUX8\nWA8jp/FrocxEh3dViBWiEssuCAM9f6sk8LpLlNZvD5t4W1uLKvSi6q/5RZwE\nOIkrCdhjNL3YpzfZL3XxJoH38oefy0hXYJiP99OU70M6aKXYAlq+ohFnagXs\nCJU1OIDrrqF0oOam4BcN5GLwws0jGIRQyy+vRLUNI04W5FlFT/gwjOS8AAUZ\nA1A4EEVIpQDkyamOzYE6/6F3qXl7HYlmcy8nafSPf29yJlIC8KL89IEdz3aF\nOazN/+M8udJKF2OadU6jJ3VHHH/weIkfpLPiREbeuOB0Nje8uJwx7rtcQ4Oy\nKEr6IVHtMjGomrw8yKNwKOVI871+1o81vKMUbzoKv7wGvs6JSZp8Y3CGqLpm\nXyLIGoIft6l1/qmDT22R2kq32FJGW10vUmMCcY/Ck1GtoPuebZw7+emjbpcc\nkMQP\r\n=AkrI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR0fu6VKZ8fWPbaP7aNd6pAOCNZlOovmy/cXWkY9wuIgIgQGKAcNbXwmxvjk5ZV1WLAyhu9idWmyxJcULpncBDH+s="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.72-test.1567853852124_1567853860306_0.4214957877637586"},"_hasShrinkwrap":false},"3.8.72-test.1567853853904":{"name":"ts-toolbelt","version":"3.8.72-test.1567853853904","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"506b011f653c406e3aea65f6c53f6539c43593ba","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.72-test.1567853853904","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-fbVSKic+K3Rpdn2viSs+EGTvDo3hdXnpbWJtsbjwoMfiKg41bSzEHxKFgSRk+p2AJcCcwAGq8nvqiJEWqDF6cA==","shasum":"43020b993c278fa263852b7ffaca78d313a4ecf0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.72-test.1567853853904.tgz","fileCount":205,"unpackedSize":181660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdc400CRA9TVsSAnZWagAAjWMQAKUdpbaO5LnchbOQbAKS\nYxGAn+Lz2gtP+g/YfN1P7GJOJZndaDiBzJINyzII07dvf0b+gM9G6k3KwfxM\nFwoFyEzydMCAarjJoW7CDMydbvdZX/MhuA5uBhGt9+nVbwyw8ef6Iumq+3KJ\nUSfkVG5VK5J5I8Rw5HsHby/lOKWpffo9McwvJP71zeWttZfRXaJLqrKhW8z+\n0ciPpG4W3rgeqhtZSNMnwDXU9dAvq33fVCHVhnqiegqXpyf55YS2S9BAXI8V\nEKC/1KIuSnJ06zhzeqp59oDSJLjrtCYf/Gozq5s3Ltnz6e/meU+X+eo+cZVu\nSy1Wga7ePhE9aK3j/fIHnismvqECvZE81+EQrDXtl0eH6KcJeIWb2SM4mjp+\ndd5AH0J2K0pvVdQ/Nefg8pbICZOsyqs3ZIJPvHYhHMh9UyVJe4EHiWhE+w1q\n0bjWzklvVSTiS5SdTBEZIXZOOfIzvith66rC7jNefRKOYPaIPVz/q5khszIZ\nCiHfdoKBydyJdxXzDep3299lDk6+yl2MA5J4NbBdyGnoXwOfYENuIAZhW3Ig\nVjNSYHTCh+E4bqa6gnwevkO0+2ZdobZXEN+nVOx1aPy6Xuqt5C8cmJhg46Do\nBkXoWJrkj1Cm5Lg6mjqGN+O3tJ/znlcsWFyI9GXZfFJqydsQeDqIkA/KobGy\n8Ky8\r\n=/8aq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLN6LpqFCH0+bacwGviuIxKMlMflo+z/OjqztDsn5HlAIgb90su9VPELuMjWtVGKYmzxJIRBeCEvnxw8qwMg5OTw4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.72-test.1567853853904_1567853875628_0.322138723876948"},"_hasShrinkwrap":false},"3.8.72":{"name":"ts-toolbelt","version":"3.8.72","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"506b011f653c406e3aea65f6c53f6539c43593ba","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.72","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-rVwnPRczAamCTIs/9iUgWW12YMscmDG79M0xiUmcmWgTk8lkjxrrwzUys72wsIxNohtiNQaOhbkgQPIxqIdwmA==","shasum":"647ba67a3bd55f1e5a8057c1a7621c38b2e418a5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.72.tgz","fileCount":206,"unpackedSize":181641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdc44DCRA9TVsSAnZWagAAmIgP/1oPyrIvh9YTYlbT8xzh\nGw6O5hyIhFYe0HFvAusV0epc7opSBLOo8Dr5wAMfbfKMQewm1uz6W/9rkfKk\ns6ujmNgczMNoot85jYp/+Fh9VWbofUh90q9wVlRDhKW5ULyZARflZEbcYtrA\nzrHeJjzdDGehQm6eKZBBWPe/BhM8Mcs+CMbZECM5DR4e3hFCN+IkainAo+Uo\nAmwp4GiWot6LlFxSCcF5AowfYya8NhOGEifsTl5o2vzB9rgaB2DvOAhzOWO6\nBEm9TADN7Iah1n4c/lOZu7LtlbDWMARAg3iXCj84zjIyk0F/fSEfpGwQq4zn\n2VrSevepgHu37iWH+Luu1HL7/tu4wT3O/+e6YCNym8DwIWOtpFuGeOen3Ira\nZcvIEnt8RF5mV4Xbc/OmmXm8H8TS3Cc91pDmljaAKn3ca7heRS73zpUs38b3\nKsbBc11myvqQR5XVdRYF7qdVkCOydXhUdJ5QHVDJg9asa8QmVgoYQczicDv6\n9+T3Edg0yOhQ/TvxUI/Uhy2bG5uYn3mBTz0/w2OnVuEiKhEfFpFnuQPChDTP\ngbyPrcs5WdxgGHka717CYrzwBjNGM5ureDDm4+gVatBmyThjsjEYjVFKFykk\nun2UhSUXC/R9N1ravqOjwYPNRm3+3pU53GklZx57LgusbatMr3ESOfvx2t7O\nXTVK\r\n=VVJ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfhj+HixfKK3y9CQqFeqo+kOVcVu6znm3schfp6b6TQAiEA3HzqsGcplVN97RBM3xRkACuJ3Hrkx+beNHVGLd6wxLw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.72_1567854082387_0.7488316536765423"},"_hasShrinkwrap":false},"3.8.73-test.1568045663285":{"name":"ts-toolbelt","version":"3.8.73-test.1568045663285","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e9dd2bcc8365a72a1a43db59183e9339ed35e396","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.73-test.1568045663285","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-NhYZDd77UcIMHeWyAME1POmtd0w8YBWKj1ZWPzJm+YSbspOAvNQ3Mt1zIAFVxLDGG0PXXsmQHv5NJBLnzr9e2w==","shasum":"c3cbf771797f401739bca010e4264fe5af5368cd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.73-test.1568045663285.tgz","fileCount":205,"unpackedSize":181992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddnpoCRA9TVsSAnZWagAAMyMP/3IvYMWow8ejz3A8Fxq0\nOqUMy8ngnHfm0k3UCYghb8f/79Pi5DUojzCNqlr3ZaILkRczwzgL2TEZOB5J\n/w/sk+q9nSxMptej8qPrwHVodI9PgflNCk4jM2zkampPpGaT4vHwkPCMaS5N\nYeANI9RUL47qm+bXWL50Q0Oftxr+uOskOvdsgOHsCh9pRu/lhWQeSbdNDDbf\nIPgZrqtqzFdi0eX5yFAhXJ6RNkgoPF5n3l5cArBd8v/OQeX/4xC992b5bUsA\n6dKVFlDHh2619R3VC3P30WJt2ps4da/w99IBG+CB0XrphREf/lAYBwYm7NYJ\nbqW/qdGXQDwmLKctXDrPyCxiOZEsgH3jKqLKzqJjPJSj6Ka0huB2Numk18PH\nXrCvrla8zrXHpHq+KMwRwxnC1wjWLTcsTw8yZOUYgJI2eJHFVDdz8l3svkft\nj3SbIGd8lpLvJy5lWvsZZkzSi/IPVRLnRvEzin4OuznVaegRASiBt/m7cnmo\nD5L3K61GGGVmM58qVoRTRKBp6ZjGPKzvo6PQlwtV4qooTdA869C5TCQzaczD\n86qk0QDBuNMZjJF3DWadxEIT8P7zANjLsTi9kDQW021GcwBv8K0YC9pA635W\naKuJPI5iLmvUQloHQSFbYRCCGgz55gWurnKRBudxRvi6jTPvUv0lb6J6eY5d\nSNfh\r\n=GP05\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHWrerOrvmvHdTw50YkvgZdzKSjHu35LixGHKaFKaN5mAiB0woeDtViP3Rl9kBxv10BNTaNK1CUPzKfHlQxAK/+JeA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.73-test.1568045663285_1568045671594_0.31281515496277823"},"_hasShrinkwrap":false},"3.8.73-test.1568045684293":{"name":"ts-toolbelt","version":"3.8.73-test.1568045684293","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e9dd2bcc8365a72a1a43db59183e9339ed35e396","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.73-test.1568045684293","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-DVWrfKlB0TrJSnWCvTwig8xOV01WfN8BtOwgghk3+MRgdcPRGG/orBYaAtTTM213FJkvGGD9EorpWKIrbEDIlw==","shasum":"9e14ae95e6bd384915fa4c0e26f0fc1caca83e46","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.73-test.1568045684293.tgz","fileCount":205,"unpackedSize":181992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddnp8CRA9TVsSAnZWagAAT4kP/0s2So/qPH/2wkq4WRs6\nGNrGEl2TCI912izrY2dj5PXpBhigSYQU6xO0Gdl4iOJEEt1TEk8WLRoPBpfQ\nf6krCIkfVHfZHdY0lDbM+Ht8CLt8X3dN6KSlvDyMXJs7YSlLSvQlYb7IUJsa\nuOIOH0HwqBfb0TMaB7TlX6RIXAdfzaYWpkrW6eHogJ4DoRJzW6xQzNV2mVYa\nwwovj+ije4E24zHDOgRTXhez3+5phWLnkaEohekPaunQYmunGmOEiHQN5CD5\n6rwBwXZAms3fJ4oUiYuAoYM7XdYLQm0nwfM3B55YW+NiYekrTfi4IhnKd+MJ\nYhbsC96euapVHueo/n+mibsK/aEbn5oEsHXSElCWxAwo21AQYZnbHEpHvMBK\ngIRd6kwNEQmQ1NZtpLQkBAD/HQBgq6nhWnyFSYVQ/2mif8j6J0jl648p01Bv\nj+PFrlo3xyb1tABLjPDsqlZHVsYVMzN5WfiF1lzDxaFYVZ1ZR8FQIoEO8/Kx\nhMnUGHtDmtxZxffre24e8ylcrIgZK6jwoRh6cG7/DMR+tjxggeBGmUIuaA1z\nyShq5E7k23ZBCFMiAF5oWARyQu2BaM+SLb+/LmPBNNoc7jDFfOqb9Kj926mb\nvQEbMoH22zTU3RbTpAgChX3vISZKvnpL5NSfmZE8+AOTmDKtPzYXOxtZmZJw\nCFhj\r\n=M8Zj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT/3zD97w9VLGFmICsMgeFQCBMiiTZG99RPkR67ldLHwIgZVSiZSAVGtPLKpUu9HPBuwsqrLksc1hOwvrbmsJ5mRs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.73-test.1568045684293_1568045692172_0.8931829636312896"},"_hasShrinkwrap":false},"3.8.73":{"name":"ts-toolbelt","version":"3.8.73","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e9dd2bcc8365a72a1a43db59183e9339ed35e396","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.73","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9xxcePRRDRRGHRhzaCSxsRczxguh3s/toWPkZDMyUtPaDFSRwQcQIGeIznijHHR47BSa1v+dYY2KRkEC7Ao+lA==","shasum":"98641064ecb54921f9700be46418114ab6a25e30","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.73.tgz","fileCount":206,"unpackedSize":181973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddntaCRA9TVsSAnZWagAAxesP/iNRPAol0Di5wLg0bKFX\nr55bJTFRSnXwyqaEQsqXCrRdUYf1WMsq7QfQMSm/9y6LyIymfenuDao8m03b\nDchJqu0vrZdStHqu4v0aSd/4R56+UR0sI4xITbVs4AKAyAjmJ3hBfP1XxhqW\nV291+cFiq9EW2vtFb8dJcE4ukkvXY3phkjXzUZlRtQE1kovUBQwAWoiVxwbJ\nowCGVn6fmEo9N5c4C0XOsjnj0qdQ9AcVvA0xb7lHLeUhjptMAjZMkDS8kdj7\noRbVESq4+8RW9teyi+ViRWSvsQfwNSCzrTWCzgH35J+QOBZhgU7hz4ytlNcD\nB9sloWa1YeBeAaLNAcLJH2LNzyvWWjk8wtyup9sewKM6hxiewamzguPWuI6N\n5LjX0y3GOwfDF5bi075jVRpZQ1HinS9viInWkGT0HwHGC1NW9MBBbw7mSwoV\nvVDiYTpSFdjLxGuo5qWyhkZFSE14lHyAmcXkgy2wTzFEtDVWPOlzOGVdikZ+\nSfAyA3igl76shdstdKwi8a5MOt7GzRvd3o2X3Cu6//7FmgnfTj2fz1Fxc03T\ncAPuJjkm+NzNjLkzG/xi1dbUzDIgHIwTkn1MLsT7FgUMRPL70NKHqFvyOXBB\nsLWAlI3dlrCmR8RnWdBewa7rdBXck2jeZTddWgnoVk5aCqz77/xq4cHBOXc+\nfcS0\r\n=MnSr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiIDiIbQyZsCkWhpuDDtLkNg9wL5iuWPoHGe/Bb30MuQIgBI2FcrWQse6DAD+M20HQFegw4Ugm8kShN9OfUGrHNW0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.73_1568045913398_0.8659561481896398"},"_hasShrinkwrap":false},"3.8.74-test.1568048748250":{"name":"ts-toolbelt","version":"3.8.74-test.1568048748250","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"9af8d4a275a8b9fc374a28159ee7b7e289afd50c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.74-test.1568048748250","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-BEtTzYuP45gXY/lbWsDYqGJqKzffE7wnKcgoivnXLrivadRR2Qr9bgTKV7wRiOpKtoJS7RJrPxU5Uug5688g0w==","shasum":"d2864ebfaf5f625658ecfc3db1fd8668713d2422","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.74-test.1568048748250.tgz","fileCount":205,"unpackedSize":182263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddoZ1CRA9TVsSAnZWagAAw7AP/in0Zihcu2I0XyxYMzn6\nYtr95i3k+o1PBtfzM4S+wS6LbchCgZjwNO39VwEWmcYpVJHU9e179cZlSfbT\ngpuzMSuRZcHg8Civ3sM9zV/LSaTMr28fUkWozW0gfVtdYaqMHIhfWADei/UA\nJQvI2iivyyBHNTbdTacnWf+j8XQU9kpeV5g4M8PgI9m6YBlwkb18Lh7YAjKG\n7PVEV4zKGvyEXymvwd+LGAzZiFNMQ3BN2ur/SBbJArHfpjYL9IrnSgSe4ax5\nY5I+FIGAHyrNOWehmjyHnEf33dAhVrIdGU3ceAiGQv5GAGsLVv5wa9G3LLwQ\nWAKizpB+VOAXXuLCpqkaiATXS8mH96og2tx+OmlD17VaDB9i9WXmi2f0gsN3\nwA6ZCAlHw3GJooEKlxideabvxH17JO90+8Dit1vhiJYpEzYTVrTIbrM38MYo\n9tPE6F/x4jGWMgD1KcPUxJraxl5k9JdIcyygjUGTL2EjtAP2BRyUaciKV0HN\nPyGCOqJMfNR5PbenYjTrpwkkavl2VwD77gEBJcgp7cJQcZ0r1wbA3Yc5lcEg\nTNc7LZUPsvC4Ur4AP+qrq+h+wJRYiZJ29VKdVxGNhWVqqENNn24mjtNRBxFr\n5rGMqVkn5smfe4W8vVMHm3wUmqaE4xXFL/pchs7iOqf8/M0f5UMlrA1GaViH\n6HDM\r\n=iWKD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZDlHk69EbmuehBF/kZ286TT4Sh2e0n8aniUSF1NiAewIhAKZSQ7Qa3O0cyfcMBHBofE+VMYq3GNeFI9BfSOsJDRkg"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.74-test.1568048748250_1568048756188_0.343573738011532"},"_hasShrinkwrap":false},"3.8.74-test.1568048762318":{"name":"ts-toolbelt","version":"3.8.74-test.1568048762318","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"9af8d4a275a8b9fc374a28159ee7b7e289afd50c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.74-test.1568048762318","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ObnEdAmHjvBzEcwpPWbVijM6hsovE3Jm38kwdlXOYQl7fiw1D2SLml60f6XoTNvaz43wXIKyBil4lFCyOH0G+Q==","shasum":"de297b9742dea1601acb7ce7890fad181ceb1c63","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.74-test.1568048762318.tgz","fileCount":205,"unpackedSize":182263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddoaDCRA9TVsSAnZWagAA790P/RN1SuzhwPJdHrxMlkOv\ndu/UNJG8H8cVHXLqJBH4QQvJDH8rOCGjba34E6+EUse4Fkjli/JbquIVwkYi\nDzrQMQJotkbl2UUU3Esq2lq9YKKkQWSOitwa683DWp192es67N3AqIK7Fvg0\nPOplhXW9waGXImBVjvHPuinYDysxvmeJIa/aJzQTikh56tW9OW1et1ZYsOm4\n/EEUz3pB8GrkxCr+OwpJrJ+Wy6ll3xwJccKHKQ6VBZbCwIsAsSt4bNfhQ5PL\nv49COH3TRKRtDUvXLV9vlX91CGXjYodZa2PUKRSFd1XRPTGf+L8tzTUx1nRi\nuNGgAmEIyHhKhekcq2Do92yaKI/tcRZCQRueg/qhhDZvA5qH2RoaHooK2JKb\nWGq5BTQvKUorGd4NhvTsNRNhIgfwl5hGjdjb9/cFpwK94Yr/kpWSRWAAfqzu\nB9PBNIZl38VBHPNx+pA4Ysguqi5yLBHP7R+luvmhaEMqjzymL/P9n8whmnsa\nlDB7vPi/elUcd7C/Re04PeCNiHHKmhCeTqTcejHnmoY9hBRKRwvT4X/PTzmh\nj2/d5R4tm+ZQl1SGOyaLSs/xqUeK/ZoV9cSICmvCy/t+bEwAVoqITlN/5XLi\nLEpjG0e68wLULf+7JXfKWx6SFtGyfCKoksCir0wEnWXvT/Y54WqniGjVzcmk\ngPUa\r\n=3QrD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEg4TnXEZuoCEJo9Q8apiqsImqbdciOxzsJmu7I4i+UBAiB33Vooj6Dzcxd0IG2vc8y4FzBRb8BJOG2Dn0Ng+r2F6w=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.74-test.1568048762318_1568048770486_0.798961734798461"},"_hasShrinkwrap":false},"3.8.74":{"name":"ts-toolbelt","version":"3.8.74","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"9af8d4a275a8b9fc374a28159ee7b7e289afd50c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.74","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-u0NOYkRCfWWdnuFEEcXRD4VqSuNZX1XmbdyBffYJD43cn6XLKDjSUP8OXjaDTnfR00wl02i92IV9EZ8rZw+YCQ==","shasum":"5fea666ecde4705dc27fee0cd4e52d6b5ff8e4df","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.74.tgz","fileCount":206,"unpackedSize":182244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddod2CRA9TVsSAnZWagAAlQUQAI2OWF9RC9FPnR1lgPzU\nrrFF/4ZuXdgnthqqeZlZdN/WARG09+rLaLzCYnGG0Q8xEt7Y4G/+3yQYQurM\npx6gfPlJb489/mYs7GiUi1oKMBPi38YUTb2e+01girgLOb2kxUFKXTvrQoLQ\nEpAYFdaiY4ens1R/cWdT9JNcxoAkh22axYrjkOYQLATY772PN0zMYvQZUQNb\nnBJDCjkvkZyxBYrKSryIIWgNiHUEfHfQQbVC735kAGJ24ze57xf3eX1t8ybn\nt4uxjSdoir8ESpnb4dxvfpqSkdRH96/I0W4UlTdFT2FtDedf2isdO7yGhTrT\nokmXh/VhPkLXi/qmCSzAg8tgog5Hhj2bdhzyDpEVP8y9R+nr0KeLuYmIC+Ya\nYRIWeVUgE6JmmAd8DmCtkzLFFFNmergHfiRtgOYtan9mGjkPMvaj9xeEKWOr\nMXjS557ZQXzaAfAsZde2lHxQhz57auN9J3hRqrpxpUzpxPEyKivgnfjd/JcI\nu/+YHmZxz97Iryu6Qar1TjQNBHgK9gDGw7mivu8hYLNUJrQ8pjPHYhZ26eSI\nJnY6xz/Bvg0h/ppNtN6nepv5eJMH8DjosLUqiklPaVNoiWWVlL9kHj0O/dZS\nflsoSytqMkTgzaXEeu9tHhOn2Grm1GG9qbWXZ7DqC9ZExc/Si/Y+DAXKaAu1\nm2ay\r\n=PDOS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsO2z7r2TuWr9bVNPyRarDPAxjAmR/2KPWKg03E6+rwAIgbzAb+kD+BDqWEoNKmD2NbBTNzQlal8n0v714GTcXnss="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.74_1568049013601_0.7961359597472826"},"_hasShrinkwrap":false},"3.8.75-test.1568049720361":{"name":"ts-toolbelt","version":"3.8.75-test.1568049720361","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"9eb0ad4c038ef91bba898e92391f07f78860761f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.75-test.1568049720361","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-liLUUP/jcKWiYQn55AokiPT7DY626sL/yhXgMnu7v7sEIV1ytRWGRNgQxjafacARRBXQvStRF4fVlvcY0hb5HA==","shasum":"42ad7997b14f218599ceb706c3e0f987675ab29c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.75-test.1568049720361.tgz","fileCount":205,"unpackedSize":182531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddopACRA9TVsSAnZWagAABzsP/2keQY4ziYzlCTOWIH0o\naxTnhC9sncKqtXayEtXRJvaIXB5IvtqMOSXKlff4e488dW+JSltxD9CfzsFB\nuIJbbyfZdefz5tyeXLhmFCey6PBi5nnQbet5I5CxWWR5I4l8rsDQANc1dGdl\nJ+B67SB/ECUZCvCRpXxU9Wua2pXSQ1lL34GuIyeoCfi3A/2IZZGcZl8IsEm/\nNg5qcr9p28n82E8HK448M87jnXSjCY3EO80jMUjGqo5RSYFPpdK7AzUPw0re\nO9CgjKnYbAzduCUkD1EtmhKM0okSTJdqAyceAO/6RAKasRjpRmK/I5GJ+RIQ\nRtvqFs8sBppvOTR3fJSgcr8f4yadCRy5FKHf+AfKODTxFT0W2cbibiJ++V/U\nOqS5CxRw6htiWZXeDnYX/24YBMZn8/3K2WQRxc1YjCkpASz65cEX7LmpX/13\nVUUhU3evw/ShyIjuNHGMkEA/kyFTE5cGZPEh9ywUvWK4+iCozNdWQiRY/XYl\nx1vX8bAntKe7qroO1zeF07jEt/9p6HXfeYZtpvA7v8Cdb6taAsGaXHVUI6e9\nmZmeO3Nw7K1Dz6SwT6u8peCz472qx/wEhDG75AZo/fupOIyVWlRdlTQmcyLz\n1Aj1leEt4yOQUMJiEKP/ofeJi8imdEpO3iKiMl/LaUq8nDV4YvGYGgnmjhj9\nSp1H\r\n=fxx4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzoqYW+Uw/hnYARqXdLag+TjHaDjBANNfbxoCMMctP1wIhAK5syHSx0rGbXfGr1Hw1q4bCAdYh+G64n5xk+kFLnc3d"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.75-test.1568049720361_1568049728077_0.13162899297886033"},"_hasShrinkwrap":false},"3.8.75-test.1568049711861":{"name":"ts-toolbelt","version":"3.8.75-test.1568049711861","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"9eb0ad4c038ef91bba898e92391f07f78860761f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.75-test.1568049711861","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9O5vUlj6PPAoFR9GV//8uqJwPHk22aVRXLj12HEY25g+PmM+S4Juz9ocr0Nu1iuO49J8Sqr/wBENtXay4B17fQ==","shasum":"05b571f51dfc2dfa53e803845a6da8cf61c9cf1f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.75-test.1568049711861.tgz","fileCount":205,"unpackedSize":182531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddopFCRA9TVsSAnZWagAAQTsQAIfz6pFJ2fEScOL8fnVb\nghSYOs3U/t/oLtm3FX77eVp/3k3ZSCxh7/VjTi2jf5t8K7G8AOasRue52cT3\nEYY/Cltfix04dmGVMkDsqEJD2ZKAlS2oMp6Cut7oSYv/JRAmzmH3Hm6cLtnC\nNR7ZYf0Il1haa15irfO1PC5P8OiPer8BvxD1Cd2VE0XfCY+/XstiQckI/bC7\nldKD/Ld/TswvZlVQ4FhYUZawriYhu+d1tORMbiP85deEdVCCpgxUo9ewTND2\nh64vxyt36IeSneklsQjqhOFrNdXaZGe3eaQJKerP6Dq2ElBS0dYGR02Z1iXQ\n87xU/2rEpNDDvGmS/8p1ckSRTcu/Ga7j+VQJwK7s+I4zX0mblGvRpE92lYT9\nYCCxqYZXQ7MDfZ8YLOSsRCIDqS2ZwXhQ0KDbTBA1J5zMGyWo6CXI70W91nFi\nGXbHThZagp7ozK0Jkyq7povs/e203TlI0c5I9Wgggqp2C4sM8MSQLzj6L3XI\nldXkFyqGQv6jfap8d1M8vKfKFAFbEy2x4dedmDqx6JnU+4v7+qemr1pig40M\nnvUViIIyvud5LAT5voKceK+q8HyVuqzdwcz6t9i2Tg8y5y6ISnDPtPB6ddBw\n5ofNT4HZgl9H9kR63H/ky4GKhweZtsgj2eAjuun5zL3Los2QdgRLFb3W39mj\nc1pi\r\n=woY3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDazYEwfaxUVBqffVhoxovJhuMyhHUBeY6dMdP0rF/4UAiAT7G8Lurwb1me+3fY1k5aMQgVK3cYKgOyz9BKSXh2wMw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.75-test.1568049711861_1568049732842_0.5252627239642675"},"_hasShrinkwrap":false},"3.8.75":{"name":"ts-toolbelt","version":"3.8.75","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"9eb0ad4c038ef91bba898e92391f07f78860761f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.75","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-QBPeeEATVXOMjtbkmDmKEl1slFzJHZgIkG0Eo41l+Ipwd/r6yXDVsiLm3InuSYI9z6cCMCKBdNixFn4uKYUH9A==","shasum":"338a74680c8946b2b7f5c33eca3d6cae328e4139","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.75.tgz","fileCount":206,"unpackedSize":182512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddoszCRA9TVsSAnZWagAAQN8P/jVhEJLhNdOCxJsCh+Av\nf4dTcNxqJYX5XlUQ9tnIF7jzfiPzSWQv+pgenWt3RjkVO735kRmov1Tu04r0\nUqUq/Mb17piokWqeWYho0C9yZhufGviXFpcLBTPBfeyIdaaVrCRKzgrH1j5s\n0yDJEN0J+EntlYlHKBQs3L8k9JRn7G+ivhWAl60kN8hDPxW1KbCxIykP2lUJ\nIuupUn1o94gqG2ki0Op/rpyBLTvtw8DqR99opIY9sMMS7x2+NX7L7IXO6tMO\noNjSeajdahijH19RDG266/tLUiBkyLLV7cTWS4cY1w5U83P2g77EveldkXe8\nRJHjwJt+LN2yyr4BWI4OqWfyVPL9bh8zcwKOsj2futWAqkkNhwHJxYgLBZqk\nd59gDskU8iYmFrFPBV61AdvdFE1fRpdT+5YT1yejv0kSKoqN1sETa0kHQe9z\nJugvX5jyt8n4Bbye/1JTrcKoEgVXwiZzZE+IBPc+76pY1qLCsJXNNeutFWta\nnD2MDTCYzEIHU3pnp2d+8WPzbmLVz8LsrHNmpWNuIeyzRlgmMS6S8AlheEQi\noM6K8xCx56A+VlJ9OCuu1yyMtUw6ypS/9Hl8UTr2QI/90hVjx7O46EmXCnbZ\n7vMcBBxi6V4+bhR/+3gTlyupZY/Fkv1ItO6ATtkZfvnVkl8KK0ZMlcXkXx35\n4HsT\r\n=lA3i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFfyKuvhTPB5jszmdCh2v0rS1mXlME0AM6ko+tSrTKENAiEA0mXDULvX2oHCTZDLTZ5M1Nlq9s/MqdaUJHKWwUbmYgQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.75_1568049970141_0.35964929706236815"},"_hasShrinkwrap":false},"3.8.76-test.1568050646884":{"name":"ts-toolbelt","version":"3.8.76-test.1568050646884","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"645f747ff0b770514779cb0cd6c1861ec0300377","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.76-test.1568050646884","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-yIGHj331lL4tWXSjXGL0B4ypVep4PwpW8s7dcknEuhe9PwifnznFGxqfZn3pOQEIM/4TNQazaAzvrEtQRixMrA==","shasum":"141082888742f0b5edb02b930a0897953abaf1b4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.76-test.1568050646884.tgz","fileCount":205,"unpackedSize":182799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddo3gCRA9TVsSAnZWagAANVIP/jhyyBtGz/OV3k7tdYVd\ngrJAyYHBGK6KrFfkoKXla8TPFi05aHLtcGUnw/0kaWTExkLWKzFepWfaokB8\nqG6qyjrcN1kyLDuszscfHTCVECR9a0uNhUZr5LdENEltom+oRVgccNtDp7Kk\nv6RqqScZGjyC+quTcXdpNuHmkJ/cUSbsj6gZtHrBj1hXOL5FMYBiR38rCi+B\n+k75DKQmeV0knHtVL+qg9uh7c7WmzviIs39L491VeOGNa7lM4YU4sJBpBYOY\nv9PDwtlPs5FQPpHwT6Qn6gTtDcajrb45lbdsefGRlKEUugLabwk9yBMzFyaG\n4B1c0ea8GJqO0n/gKtkfcerKcsTo7koil0mfBXYe0uyp98tYO0RdoBoEg4R2\nuIZDcjVpPLftwIQzZo7RxO7yhvy8jSZX3tEQaoNwJ9/lCqyC2jO28xPSI0jd\nAB2hn+uBpEeoWt4iTlNMT9ZdM/Fn50gDrjFDMjR9UqnICaSCRbAs20y4f25q\nRU88TXWDFfDTSVDUBKWQHv8RazO78jxOi9D/Ja4fpG7HBg2zvGYAeMUHczET\n8SBTqqe8YaKqGgQ3RWQT9iws0Zk9U9rnnzNQjRzPrZQY5yxhy8OslBZrQPIA\nXMBcvmdevqZc6y9xDX8WNRF+DaK0Q3tZ3LdNmOINuRoGn1pMksyYQcTzTxAP\nFglH\r\n=9pqY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFkIe7FY+kxaw54Qa4SaF40SbvF1/jH4vj+4MzGiYgDsAiEA0qrrm3OrUj30q672jlEKWZtZPAYDurrlqdrDdrSBJWQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.76-test.1568050646884_1568050655480_0.3075561607657993"},"_hasShrinkwrap":false},"3.8.76-test.1568050652028":{"name":"ts-toolbelt","version":"3.8.76-test.1568050652028","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"645f747ff0b770514779cb0cd6c1861ec0300377","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.76-test.1568050652028","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-cCa9naEa3F5PZ8bWzV1k/vHZkkOZwV2lKr19rOgt4YDZFIhlgQf7GVq/oNZmBM22NtIHeaBfMbm1I8jqcK/EAw==","shasum":"6cfd7e299ea785cbbdc307813ca2351edae56ab5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.76-test.1568050652028.tgz","fileCount":205,"unpackedSize":182799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddo3mCRA9TVsSAnZWagAASg8QAIXhfb9Vll8+0+eK+O8T\ng8gWEQlog2hhwOql6YeoyTXzUOj6mjF3lR5g5IIX9lL+LSE93qJQVXrN/032\nszKNGQHd7rWq2OZMYYsDDpYyLCEXJ/MNYBiiOgaXgKGkEmeZnrha8ywmXAha\nVa25p6mkXCdcVWJcwiw/5gqcGyfOghixmWG9XmCd9ezG+Fk/+UF6U9FHhtJe\nI19zk92XV5nrTsxcbME44bWVRSADgJvLoJ/mteh1X83HTIs0kyl2Q7g8sw0j\n5r/beAHn0o/Mw2gI3BatO34pNXD2FQJQggAEN+FeaPvtNaXhJJ9ZM1vJb7uI\nUjtTDHSPtvdO3gB7k/QH4fedzcYHiP1BO5BubLZMtfq1qyhJWwwzuCjmXclI\nHpVpemNuuz3uX1nafo7NolYP9P6AZw1oqOKR1abw2hJ/Lbe34RZ9PO3uBWQT\nrPjic5WRSHa7KE5MPO5+a90QWxupEk/6ZqjZ2CjM7xOJM3qx3wuVovAP0tTx\nSU8GvRrZDgni6OSx3jhTHr5mTq8eeXG08o+3KNl4l7M6K1p+BLiaHJIOKNWU\nzFW9kWeqmOi3KwwUGYdbz45psxFLNq26pTveMgkSU6cbz+2jGfO18LUuM9ds\nMzz7Pmv9xjgpdJrrOnyyhsnDQmtU2T9Hhoy04wjDr738kmYFmVXAX9WYCVuS\nO3Mv\r\n=ikEQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHY6jrV6rzHjVkmbs0n2+oo7lPtBAS4Gbzdpg5j5zf9rAiB2cD8O9KWUMEKZYgiMDsn03Ryw0dlKfrcMvtgH1XQ5mg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.76-test.1568050652028_1568050661451_0.8492966234476342"},"_hasShrinkwrap":false},"3.8.76":{"name":"ts-toolbelt","version":"3.8.76","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"645f747ff0b770514779cb0cd6c1861ec0300377","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.76","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-u23a6rCFNveHIjKVflbNIuXGIMj0krvIN+J+UkQyHfRQEFLmf0dagaVMe3vGIcjTPXMR2Wwd4ZYD1e3tjV7oYA==","shasum":"baaeb2a2446b6940437f327e4de5d49b1a327a02","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.76.tgz","fileCount":206,"unpackedSize":182780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddo7SCRA9TVsSAnZWagAAvKMP/0LISbTCRALFt3XzSMr0\nPOgpSxysRJZxs/vEhnunTNFQaOmWGiU7gdRGcHeSFVR66DtL4jxJu+b51F2a\nzne3sTUl46novtgZzmX4mtavXJOCiMF43BDH2wk7qquC6HPJ9S4KGTl0wByG\nsf0Hl5UTMYCbjjdEJYWqEKNUy5DIIsLd1o5ALlKGo+isYTMBFkP1HUoX5vVz\n3bzfNlpZlxAoE8fl+A2CeDeQb02l6s+PAzLryXvQDM85KCcxEdelXqJGYoYT\nZPt6jgIil9GekOMY9R1bYW2/cr9dEk0Rhf1Qhm5OIqJAFR3Ly8F93jEFvnXR\nGS6L49cfEEdsqctw13iHkv2/Or2FMuXV8sgx/3z+WS33ZWnjVAiBMSUrdvKg\ny5xATm1jDohBdHoAHLVW0Q/YNEzpH9VNqgLZXPWyp1pNzroeaVaY2cDKSxF1\nSccdO+Z8e20q47j5gBBDcVuvqWdWpVPnQUT6OsKjuc38vbFtX9bVdg1uagpZ\ncFoxEEvoqizjLL3YMB5KXKnh/qIlXBbeUgjfeJrjZChjcS2q0q7pYV631jUz\nvYm3LTmv0Mk/Ygg0k7oxdY51EB6mKx8wi6gwk6SwJuLq2TOZ2zgWKoiKskMA\n+IwvbcaY0SL5kJWDRIDNxwx2yFz7PC1hlcngiFnbNru6JVaaPNHh1lJU57b5\n6JKQ\r\n=NIzJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX7xmIY9RXhV25YlrHUTcLOB5eCEeorcZtODkPd+LFvgIhALCcfwaR9ZCJmeWae66M08Mb7nkc54BWm/HMG+b1ZZEN"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.76_1568050897621_0.38402062231126277"},"_hasShrinkwrap":false},"3.8.77-test.1568118238285":{"name":"ts-toolbelt","version":"3.8.77-test.1568118238285","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"c2a50189b0ee729207ce8c72d78b16bdf3e6ea37","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.77-test.1568118238285","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-vvNiCigfnDA108XZpncssOO4ek7foFOt+cuV6tAMfow5r/9EwjN4eO3mOJqFjB5AWgg+Nfe5xj39NX7Zjz3sNQ==","shasum":"38a147fd342face735eafa90af7613fe5e3de959","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.77-test.1568118238285.tgz","fileCount":205,"unpackedSize":183068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd5XnCRA9TVsSAnZWagAAxAAQAKFGcKY1taSROZffChsP\nX6JdsR2Oq7M+OeI/Ro46ahqLKWSCQsVeZl9Mm5MrCVjOSe3HgEgANhb9m//Z\nPUixnDH3FrQQIFJKSgGXDmEbhHtSuTtPb4x6zwvlk3M4ftE+/2USi6sAnPJZ\nGvXPo+R+6dqjfuJA5Rq7RcnDwjp+7tgsElVxU60t/lAWpxbaJ7Q6tb7ht08F\naHc4BrARyBCRfYJDFe8gMxtow+ypyf4sESGavBgBc15m/4++o2dvP61U6PCL\nXfQO7bmF4MxLviZZaeS7Zo3U0osaiEX7Bdc908jg9VPIDr/KkTyoy1TFk+yy\n0qQUSKYMYsAzZ0vl+B7bm6pb3fHk0JIZmselmWfGaM86/7IdgLafQXk0R6G6\n/J6IhypESdJgM/1DBEQF3SmIwc4olVHbCCnLgpXHilcec/PM6lL3Bh5m4WwV\nNJT/rWuIWEy831kuoMuB2uhgJNCOsW7FJsuB2cTR7Vf8sq1vq9ld/JQUJyLI\nYVVfRu9oP/XSAkxrn6468t+U1En3aUbYGvXguyf9y8XPz5eJgjeGyWCiN4v2\nUVoiHf5Dx6a+qkG49yL3zGHyxkp4EJ8Cx3KPrM3NmNT1MCYR3ipjQs9Cu50Y\nApLVDKEMhDoE47ReC79k2holP/r/a9KeAQdnhKkA3ZFOc6WGZaNUkpf+cN0A\nGcX+\r\n=KPI/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH2FyqEsCoRfZsUKxP8O5ol4LorP7iSwIoZS6Pru+IQGAiBWGnXMEB9Sn6F+bCFiKeSg0k8CnqybHig5gQPMnQvgJw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.77-test.1568118238285_1568118246197_0.7290851419291435"},"_hasShrinkwrap":false},"3.8.77":{"name":"ts-toolbelt","version":"3.8.77","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"c2a50189b0ee729207ce8c72d78b16bdf3e6ea37","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.77","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-tXqK0aKfHHkEfdYSR0h3VSSBblGe0nnE0omjIhk2EXgk845tYv4dbQ1hAQXfdOhg4J015I8UGVf0tDcpDZEJ4A==","shasum":"d7f8946461d32a9405d665ef1fcf9fddc579c981","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.77.tgz","fileCount":206,"unpackedSize":183049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd5bNCRA9TVsSAnZWagAAFBkQAJMa/Iz0z78UH1qJ7Uz5\n1P5xQ7TEzJtBcVIrd4H1Ap75xCL9Uuk4Ae+yvrFfrrtCp/7+okcA8zj56063\nZfjnRL4GaCsRPHaefO0fGEmN8uI1ejHD1L3OE47oVZZB0qieLn9knCZc1jOG\nu2FMhBMHAIf8/Ci84wSwgJzbGmBN4rUMPWhLheD+vBFnsvK6Zc38wjkfD8Tl\n4RErtnmjYWdcDhWYsGz/qkEHZi5K1dbBp/7U3wlcYVGCtlIK9Zrm3fDuDJIV\nrb+BE4nQp0tksovHwAA6rm2pUe8jlazYIvnGeRd7vMPkSoUn4YImk3oP9ITu\n8NV8IerAHkAK3lYcKtF3bbPkdOR7Y8CF8hBglQZE9JjrLdbduZ6RnG5xai3u\nD42eOa/JBLfgQZNmRk8h15BPqybpc4M/NH7SUKMxv7SD+cpafItK9O8/cA7/\n7YCCr8hkRGNOeQT4HuPWDfJX0HghiTTJuBK1D9YNkxyuGWY71BuNr4uIxcMR\nd0eseoCrhwXLRjQUSdoKahr/UMsHXDewNbeyABb/anxqFPiMpXSeKwu8k7yI\nuxwDQOIji6VSel7GR60oDtFb0WCW65mDWqvMVrarFL15OmjMh+DL8YB6PNlH\nH7Hj6Z83rCCRUY9+dNz/7OGxrU8df4W36HJ9Cfi6HuLerZekOUfXcLZxq8ZO\ndPgh\r\n=rhzM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE0RWJEQtO0WS09/pvCDCntBW6Mr3cM01XBkS06OrApTAiAQ/UBR2BGIGPazjSvK9+S4diDEVwQpy+ThWFn26odXgg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.77_1568118476315_0.9630788732921678"},"_hasShrinkwrap":false},"3.8.78-test.1568119632249":{"name":"ts-toolbelt","version":"3.8.78-test.1568119632249","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"a125c32e530d17e71b8435ffcfda3fe1aafcb5fd","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.78-test.1568119632249","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-c4G1maSwy0zElcH9GO/p0u7jAHKvL6yR2ohmicbGUFAehHn1TAy8HR938FG4kubFQUdGTvXimq6Y7ZQMhfi+8g==","shasum":"9b14541c1107eacc2a391fc9825ed51f4c87972e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.78-test.1568119632249.tgz","fileCount":205,"unpackedSize":183337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd5taCRA9TVsSAnZWagAACdwP/1os0gq2SMJh5vB6FE25\n8AtuaZ9rGyB+uWAYiuhDZwuHloLrOq38FSSxu3V8u9y2dgD32m2vmfsvjCUf\nU4cNG1V1o53KyNjH7AUewIEivr57M1p86pTeKi+ebDpJV3/WNNKsFzW1rVRN\nSkmlNxTR+goe3Ezhe9rxY47I58qW6Xgqvp0g6QjVWU1ZG3p6ZVRb830VaF5k\nsRfeMgWRhMnADVD7FHqzfwDzzuAPaph+uKzgEh8Iz4ZOvvC+Qzui+lFrNrZC\nJN5a5FqwzYBkkgk3PVMFnrWuHW16fXwbAyeU5go0A7Pu0DW4xln/P7E/iTN9\nA8lklq1QC1yOqpbXkQwNWHOtFJJpxYZiTZGmcmbV4h3AofdPnx6sOe9pelYo\nzTJD8879OPpk959gCEsEWjhavnvnjPaDnxJdbRhZGJvvm22yypyF9m/J2QBM\nKwJBtnQ3Gd8zLzyyDD11JCwtUH+AA1iYBUO2zygyxpDmLB6aqMpHOt8IgRUW\nRrW7SBevm7uL9Du+jwhVNOdLgfwscrf78kW6BERD4Ttw6I03/aIX/dPI1/58\n972+wJpIXB0HDWdYfM070sCooslb7SRQLPniRiN8cvt3Xxnh1ZhhhYVwEwwa\n43H4ffC/I1l0ViDlgStGH1koiepFctihPZ1p8Fp90wunueFZT9x2cHVVCjLC\nHg3Z\r\n=rFNh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBeuxivBEDJ0EVDt2/H2NRgIfNDFPdwniw51T/xz0c0AiEAoz5dYJ5xQ5dR1u8U9ECSfILDg4uWWd/kdAg+ml+xGWA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.78-test.1568119632249_1568119641941_0.39560534678930437"},"_hasShrinkwrap":false},"3.8.78":{"name":"ts-toolbelt","version":"3.8.78","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"a125c32e530d17e71b8435ffcfda3fe1aafcb5fd","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.78","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-2yqi1c7U0+FJL63CHRGWRFhOTh+ZEcrg1gSldRHzr6z2s9nOOz0+B/A0T28+2aVaUyKh/BarkDbnQp2rhkB6wg==","shasum":"b779bb32ac613a8987312aa44b57dc5a8998dc00","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.78.tgz","fileCount":206,"unpackedSize":183318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd5xZCRA9TVsSAnZWagAAFLUP/jkGBK8zEi0R+QpIv7Vw\npdRKfYUvWCYOR2qaw+vxY9nPv+sChvglNdDejWjB7XfHhABXCYj8sCPgt3ss\nX9XQvdNO28I+IhMj87k9Wau1xygxBVRHJ38rtsrTHGoXQrrjxLEYtw+oDra5\nSuOQASpdXZab/6CdNj8xSbJHe2Cofdsv8PZt/valVd/IVd/ERtSHQ0tZVpUK\nD21iUP3dsxlIGTtDNPs2mrkVethS/J+ukNFGdwzirkYatkYGjnH2CflHT2Lm\ncI3Yu6VX7gtCeyQ/EWEs+3zSOquEJ/4C1uYhFSaSRYHrsGZ2V78/X3UxAoyc\nniNefvsEMxRCKCpoLHwAmxC2qEfxtgK6a9c5+rCv76nzjx25bdrNY1FuWjqj\n4kAGu8f2TYFvjj1Dq0UjyGXEcsOPPXlyTCjrxBmyJQ0wn0dCKdiYgI2Rpu8M\nRAeVyjoHpeNxTmi68CA2SV3ucFb5+x2YE0CciaP2CoUNxart1UxC7wrC2AwQ\nVMdwpZTXFoKQvm1ltkneI/6Ax/O7pkAB0TudVnT/ZgXfzjcZgezNJehPwnPw\nTx2+Yg/+osJkHjtQ7l/XxPjIs5EBZZO+fpqqojGugNlmMsWxLymDyyp6GFnn\nDTWSrX8SBS97NGiBoLkAnZnnc+fcffC0aJp+57Cex2RM+6beutkheo+jqDpk\nM7ik\r\n=GLtA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICG/XRlOAK+sfkpd7nWuZFxIFJpowrNQ/BlaUciDea6sAiBmh0zNCOwtdSh2FH1MCeBJASaQ3oCZQ0djkH8lYYNRzg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.78_1568119896736_0.11423644510463093"},"_hasShrinkwrap":false},"3.8.79-test.1568122055031":{"name":"ts-toolbelt","version":"3.8.79-test.1568122055031","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"db65183b06f8dea98e01cdff74efc6e18893260a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.79-test.1568122055031","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-opABrR42cFHqF6ou8u59D320eJygNIPkSfSNpD7X/bEqmcDb83IRCV6YlJhGww6uNlDg4pBdB0mNcBTFmb9GaA==","shasum":"1733426682a39a182dec78d27ed5fdc346c91247","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.79-test.1568122055031.tgz","fileCount":205,"unpackedSize":183606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd6TPCRA9TVsSAnZWagAAhp4P/3BIm3L0eGS+z/FUWmhV\nV5OE++40DAczpXIegMHAlnLiuhmYO2hY1uII2MlbpAdqLMmBIJjQJr2PSwus\n9oIDT8lwclQ44xsl8O6yjvONeKT/oH5DiLUMUUQ89AKIpX2oeR5WXYlgZ568\nhAuJpywne4kixLGvA09pHsVjRKDBN4XWweIsx6dhmg+xdvr90YDwXJRZEpWV\njNnKkzo953JaHYj4dS/hB45cUrwIsE0MJKgaAbtJpFjb/RdoADA6BjDAiUub\nNr1yqSYZVSr0gJGbn1Ix4NngAo6TqCdKU1Pd7apnQAiM6nUHoAY+E1regIfZ\nMB+dpOHNwSfMXDuIvAv1JEUzVgV23EPZJISn/ky4H6LYwadxeGlZfZG+TF5b\ngIQr5/evqFmUrAWV+auyV1b01lArqN6GVF3yNRPlhe+N9Py/FLnJFaQf7VzX\n3MhvblMEZB3TLOji+n7hjtRSypUZKn5J9FuSXwPwn1wf3Yve1ONFlJw+JGiL\nCP8s4qZ42fqcpOi5+VQshloWbqlpfzVEy5NUWEszVbtQyQW5w3O5ayHzh48Q\npwav5YhPLQ4W/Z9YbMkpY5lvX/Pn7A4QKdf15/1/MzvYeTm4mbOjnsiHfkT2\nBEd8eitMskpUmcCGec8bxPUGsa7qKhp/mw97AxDNHe4IRZ3LKfexvCEDUyDj\neF21\r\n=bF8U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDNyykhL5rRY2SYmJFZFYTyH68Awsf+GLGPLw4E+NKiRAiEA5sKCAoThdHDkiWLpdFFkYC4+Dz20p6tjKR8hUkg0OaE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.79-test.1568122055031_1568122063204_0.32954411986520604"},"_hasShrinkwrap":false},"3.8.79":{"name":"ts-toolbelt","version":"3.8.79","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"db65183b06f8dea98e01cdff74efc6e18893260a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.79","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-lrbXCxncyDgmHY7sSRH8SDzNy063OoIiNcXiLOaSiqKPcPR9VKvuKxa6lVWSAewAjTZZu1QmAO623YO2kQQijQ==","shasum":"2e3b7defd5db5a3fcf1741d75312a81b212ce339","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.79.tgz","fileCount":206,"unpackedSize":183587,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd6XQCRA9TVsSAnZWagAAzwgQAKHtnX7kSEsXYO3XvQ4R\nqjdJEbME/K1Mv5S2TO8UslJ3FJRLx0wzs31+3YCnM2U8JBzD0govL6Nm+FVs\nK//oFrrjcoHzPd8TmiYH1mwpCVi4QLJAHjWeYG1amNPP+NksevZ0t8T0mfEM\nViv1tqH3dz9oCXNdpTjSG2MjMKVEIFgJAiDZY1WrLp6MRt8jbkneb5wTJzfe\nrxiXPkLwDxgY2suvQJAO78ecYcNBbBC2otXD+DOJGkRyJxjfiQUl+XfVYHb2\nynqr0h2JHxI0houo9ue1iKPu6eDUWo83oQBw/nO+4TfyKQkwuAx675m43hbn\nRyIlleoLdKNjW64pbOMF/HatxPYlXe9cm/4X9WNDkJ2O7Na0ZkOry3iuvaLh\nsXGa3qKuZmTHXNNh9AX/ojYKHyfctVcgWDkT7FdfOMd/z9l9vw3NFnhV+hVo\nkjb7DjF1l8u382RCOs7jxe+JaMj5C3o1RMVYX08W3KfDz8UbQOqguFnjIJht\nB+LI1sPgM4px0RWFaFsc6ZR0hf3LVo8nOgozx0DxoUVAGYiayt+a2eYc2evb\nBKoefSAvPKR7ecuSwSp0sw0kvE4Enj0pod/AUIigJXOYwvlh2mbwivCa3yCp\nGxGxVRsLc2vg+PxibUTKu7ZRpFagO+4kO6hdAzoTgTrtbjPv9sLiyyCck0DC\np8xA\r\n=jl/3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCllskrxI1HgIyUFYMIb41w7utlOGmSu9FObHXZB4i4aQIhAIEUCMWCMxE/qxZaY6tg7QQLemUml9s3wr4STeSTjmYq"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.79_1568122319992_0.15411217445986813"},"_hasShrinkwrap":false},"3.8.80-test.1568122591989":{"name":"ts-toolbelt","version":"3.8.80-test.1568122591989","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"5a7a56ad58566edd58ddd4f1104fcb98e557d959","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.80-test.1568122591989","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SY1l9B1QKrCWhir5T3/CFb4ADbE5qqmvJEeLCTRPKDmA9fmbHd0BEoCh8Oi349RzB9qzwsrEH4pVhQ1P6NnXmA==","shasum":"cbdad523eeea2ba248c3eca93050cafcd87eff06","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.80-test.1568122591989.tgz","fileCount":205,"unpackedSize":183854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd6bpCRA9TVsSAnZWagAAWRwP/2paKyAGUh8AZr84zLxm\nD6u7vX+ZBB1Oo1TKGEeTMhgldoEwrDfvIqa2NiOITwlYTGwJpbE0CO12BZOp\nPc/7bGHOMSEL5uAKmCZMh/TV8ueD0PHDAwA00/x9IePs2oySQRdRaUR9QwUY\nJv/Y1eHkLvC0HzKWCcCmS7WsbjL4ayAEu5Pm/Hyz6H/2Tzs6YS3Sishmp55G\nJ3lo/4cm6ES07N0XXRc6UP3UwnjZTPLocpX7mJyljeRi/medOnbT/hLeYrng\n8AuvWjYsqgXP8XCHYG/BcFGdSGWlNGv7jUmrzR+ztBjUDh5AMggEhm1egNSw\nAg0m3fF5+QLebJADsLHwEx9/pOXcj2KDmjzhlagEOfqNjvCEXWLxxPiq84lv\nBKhimbGuAohiFym7GVRQd8r/8uPysb0ZcnYwjiSofntw/ph6XzWIv23dVYT4\n1nBa/eI44tH6EtOpKGQCKxDE0E7bZ5yHNjnrwk88UZCtg5hHSWbeYKCANnG3\newbFRCZQwCsb8DoCAqEwzJ+4PKYesPbfhN3gc/tsrebAB8vBFR9UI0mdColB\nKQAWM80NgDQXLoTRcP+GTKB9yutNGKnS84iAYU2JI66s2y289raFKa86nFce\n04KwBHjSB8gwpBg+DFknq9HvEc5/3lQz2dTm2zhQJZG7Tq4tAY3yL4JWNSv+\ncnm/\r\n=hJNw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeqid4vPf8oLMJ0cYdw/3+UUGEeYHabA7/Y4TnJmxJTgIhANdyOVSrbNjxGQjGpDjdiZfbbQSso/XsO5xP0Fpz0gFE"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.80-test.1568122591989_1568122600503_0.015081250150541958"},"_hasShrinkwrap":false},"3.8.81-test.1568123200403":{"name":"ts-toolbelt","version":"3.8.81-test.1568123200403","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"795597e9b38e1dd94f91b1d2e459c28ae0e712e1","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.81-test.1568123200403","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-FDIevxptY05Fe9sPn3GRXnzH7AsNJLpOsK44vj9QzrkG/3VSdmpp/6cq/NAMoNwRmem6XpAb/KFwiqaYhUk48Q==","shasum":"8658970d13d57989b18c909e29d6af0d27332628","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.81-test.1568123200403.tgz","fileCount":205,"unpackedSize":184148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd6lJCRA9TVsSAnZWagAAldgQAJoDJlPUUfJcKjXFyKjw\nQ5ka2nLI29BU2HTV9lYEyOBCoguwNImUFiGs8d7ZrdcUKGB8G2XX/Jj5bmvT\nzOwW4tFRsvaa/tMXopV+WHw+SzIwJ0S1Fuqt5c0GxCJ6ix6Fm8Ed01eZDdji\nOjd4gG6+VVYG/2ybs4zR34AZGIkkf+MnLcgFxnTTTMB5ErzGZMnFZQ+iGTJz\n21iexbj5nDUjPGRakqFf66BO92Lwn/jA4jaAacvEEmNPsWtUFXmHof5dMHwI\n25IwtorablmnfxMvj/0VMcFmYkZX34AKkfP6YWdp7AQ7B/PdZ2rBPqdTiIkP\nWmIsZi4UcWLkHo9OMMaZSUCxLWu5CEYht15HsZ3HOVLtuUJ7+unN6jZpt3p7\nvePN/4EtycVVgCBTeaYLtXZw03z2CK2DofXBudrDsJGoGNMjZznHiDdbOtt7\nq+HfKo252WvS+l0BwsXIpIpckNeVqMJeTWOsRHUnvg45z5KSrxyDgUOLUO96\njqcdXB0F00FEmBeUt/X/NNajdtz/L+wQvjeZXhOfDIcWDTjmXcO+EexT58ri\nXGmE56cuiO7uV9JiO0H5vM9WIMxA8xw5KE1VNC7EEEFDVm6qE4vuFMLRuC9d\nTIW6A9IPpLwOE6dVHmYoh3Iqr6nhScCBz4cG9Y+qoc5EbmueQbB+kQ2FlN+4\nOrlU\r\n=F5EU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7cLcX6498tEzgWmqnjQD2AXEAT+9fU9W8wv2V7QvwcwIgTtG7lJLriEWgY+YUBMtp3jVn8g/+xSk0UaJ2A36EU2Q="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.81-test.1568123200403_1568123208975_0.8767158287834207"},"_hasShrinkwrap":false},"3.8.81":{"name":"ts-toolbelt","version":"3.8.81","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build":"bash scr/build.sh","build:docs":"bash scr/build:docs.sh","build:types":"bash scr/build:types.sh","ci:branch:ad":"bash scr/ci:branch:ad.sh","ci:branch:bd":"bash scr/ci:branch:bd.sh","ci:test":"bash scr/ci:test.sh","ci:test:ad":"bash scr/ci:test:ad.sh","ci:test:bd":"bash scr/ci:test:bd.sh","release":"bash scr/release.sh","setup:dev":"bash scr/setup:dev.sh","test":"bash scr/test.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"795597e9b38e1dd94f91b1d2e459c28ae0e712e1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.81","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-XVSL52X/DLUvMmcALOpvnzwYsB6MgqdlUNmHYA7IL2/RGezES40kMPnHt1N1OJ08PyMog8VMum4ZkXfbrw02zQ==","shasum":"6fbf86701cf877b082605330d30a5d2592ac1178","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.81.tgz","fileCount":206,"unpackedSize":184129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd6o0CRA9TVsSAnZWagAADEAP/20rMyxQ5XiEL0M0t82b\nxChapk5dIP3ykELz2ZhHrq5bQZuTiPoto9kE2v/b5GS3Rhw9Ij45hHkRaDbs\nXM0sTdkMzediLb6eWRwknY3dBL82kIbXjE1ZxYXYijzsJRgKy2datuWzT05D\nLczYo2WylTuhVv/gID2GJdxQsav4QZghqMWr8FC7jrtWRXOG/4q9V8xDiTUO\nfT02/2Me/1upnqH6CQfdBTyJqDnDLldbgrfE89/kYpDSCsmBP+k8LyRFHFc9\ndnzYuTC3oflqbUPl0iXglIc9WhO+NAcaWiuyazsNquXG41WU4UaA2NUxGFbg\n72L2olK8vg3HgB/uFP+P+Tx/mh4vKNcVDmsEaEcgIodIV7Uqa+bLZYGZ7WiO\nloZZ1D4LBpZWBAdWSioWkJQvuwXT8UT6f6XIxj0o+SQ6q5l97IuoDFUrbGea\nABOteE5KSShQbmQHqaEP+zIivmwz13l2bBo2//JR0i+xGR97VFddRXvbzh4A\nRNvanW7INUuN+bdQKC+rrBCnP1HLtigbEONKF48SzU9EvD+pSgKzP0XSEA77\nZBDGHk8JXyHYC/129c6011Q3GGHRcSyqTb1UFBPGx+f/A3COhdbTHtXQUJZX\nA3qT7CNSnGgJL+pp5Q5W6io18OLsWotpVDZWoeTTGI61VTiu6WxgxgnEOTBp\nKfwd\r\n=UEgn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDOsBV9yhOZFr0YiK5XvC4DAE2CLOxq7kdX2BDskS7riAiEAtiGDtfq5nAdwbGOXGAfXRVMtgyD47Q+n/Bgga0HHGDU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.81_1568123443767_0.19882832138963913"},"_hasShrinkwrap":false},"3.8.84-test.1568142262855":{"name":"ts-toolbelt","version":"3.8.84-test.1568142262855","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"94deca5a034f1c6a5706e9c061d26f44bd7cc384","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.84-test.1568142262855","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Z0kg4iL0QFmQj8w40lBglNesCzEjNjvQr0hG/96PIFumd6MfKReQT2mUi61u1A6r2ph/J6WdFsxCuNcz15iELQ==","shasum":"0a021e5be28e6c646fede5c5a37d69ee7c80711d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.84-test.1568142262855.tgz","fileCount":205,"unpackedSize":185129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd/PBCRA9TVsSAnZWagAAEOgP/j8+vv9JKDOg0I5DNAjP\nRx/tNjCFy74WUbxJx77Cyukfs4sDlqZsvJppQL/q5kvaX07IfIEzEyPT+GRt\nSntuTxy/CK8cILYCHYXeUY/aOe18Vg9CI+nqRmqKZxlLVCSYl8wZ4MjIOV5G\nthHAPEW3/J3VeW8dAgRqpkpnToAV0K4vI1SJefyV8xGXXT1/3rGQQ9mjDbsd\nrGkEOhB1o4w3L4aXxT0+vZIzNb/Y3T+24SABJnt4qb1yrtL8Pb4/HWzCE+YH\n+H7GS1H1GzlK0EEm+wBTqQxJC+pKot1N/HWlA9Xv1mQGRoKNfing3yQcQo8F\nZvapBuE/S96R6cWi6/bEkdqIjVXZPQfs/ecwj7D4yAoukjZ41kW+WjjB17rY\nbY6cxAWcTYfoLyR3VF6vGGx88q80V38KXIlLbBwPz4ypJpFpajO/YVAPvvZU\nn2685ks7YOECk94gm2aGA4c5WMD7D4Q+4+8MP1J2PzePgoPj4vInLyNl+N6N\nWZOoZ0eY4qq+DfT8srgSXf5FLhD/OfrYr1SGW/3mZmnWd+f8EHph6H3AuGvy\nRVxzxJyV9w/NWMnPGvfUi0FJMCBwNB5G00XltvJ5JTNTixI14xJIMsks4Apc\ne8T1yfha3ePZ5NgyVrjn9YTQ0YRZ9EDdKZYciF7fAT3qjmx9ap3w3OrI9bti\nVfXw\r\n=qydq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD94uwdC3PFirLri5723+DWmRUxYZFPnZWPdPHbshvupAIhAIAmEOYXuMTZ04RPIp09SEKZYJ4BtFcoq1O89phoMhka"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.84-test.1568142262855_1568142272087_0.2524301747222244"},"_hasShrinkwrap":false},"3.8.85-test.1568142943247":{"name":"ts-toolbelt","version":"3.8.85-test.1568142943247","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e5371b1602625ca681fd8fffa0846cea3b7814c0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.85-test.1568142943247","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Qqbv9VIj+H4hrWD4Q62Rr9ylJG8Zza/0UrQqM6e7tKUzmo/4t1CHR82HD4p0q9yE32Mkn5Gv9MPGh7aqpmZR4w==","shasum":"1cf182508713202cceb7c6d39a6b23995c1385c1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.85-test.1568142943247.tgz","fileCount":205,"unpackedSize":185332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd/ZnCRA9TVsSAnZWagAAI00P/0ft7mxf5jCV0C7Vphbp\npks5dgMNyRyx16SY8kX5KrLDeQCTq4tgL7a8gclSpLZUdSWzRWiDLF+9KMTg\n3QF3GxS1jty02FktkIfEigHD/mfn463zOCRflm92AgamxnUbDNXbk7HeqdTD\ne+5uPnIXZz+A+GuVsFrYv/tVaO097YtDT/rTopEo7l+h/EoLCc3KYKAnONHE\ndMm4wExZEIuyp65ZB9izUwbG8313bJIRBkPApT8vrnKf3klI+F+Wo+3inbnF\n8uceUWY8XjGSXoz+8hFRmR98lguZ6mQ28jHAIyHW98s4Gui33QY1SOKmav1k\nApfJxJX0kTS+8Vb+iSsLFWMpGZjiFFxuOFQW9qOoS/lYhMdjGenVDeOhVG7/\n4XpT2iGPSUIN5pPNdcZmU33/mqHYUHeZ9T7LNsE3lCD2ykt698PEeDvBM1Zm\nnZkMmHTO/UN/uemxdlNRwHypBPiLrJLOK+tgBSaFkvbDUliucU5rvV5eOW0p\nLUN64V6zGCmkequhxXIo56JhNBw5ZiWRG9f59zNS5pmS6lpIiiV9mvlU1Vje\nIcsaCTLBLd3cJSFbNNta1e+MsNaVzf6oarFvLaUwLUTHGqd/Aih3ZnD3lDpP\n6CseAyHiz8oeYujNQOwoAdZsxBvZnxluiQ25Pa8Z6L8TtX0izjTT9RQcYjIK\ncJzV\r\n=Y6Hg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrxKJU1UAeKh47HOBFm86s5/dZvH6GhmhEYBLk0AE+rAiA4qBDBxCxdEe9stucwQ1/PBlp6Jc/KSSEk1dxOJQ7KXQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.85-test.1568142943247_1568142951229_0.5105558524209597"},"_hasShrinkwrap":false},"3.8.85":{"name":"ts-toolbelt","version":"3.8.85","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e5371b1602625ca681fd8fffa0846cea3b7814c0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.85","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-JafyGzB7j/dSUNK0X5J8Ge33EBZ3qsRcaJvH8U5fF2lqy3/FDIfB8vJ+p1c46JqHTEinnY4BBVsAwjVcAq4x4Q==","shasum":"64d4dad16ed7d3f098865aad3d0efad5ccd65a76","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.85.tgz","fileCount":206,"unpackedSize":185313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd/dXCRA9TVsSAnZWagAAes0P/RoO0RubHQITGkw1i9r7\nJGygJrWSvVU2Qi+4rKBADuI6KplvFMI/OMrmwy8tGCW89mXS+jYXvL4msAj8\nToHdI/AH0HlDF6Dld8sqtDf9TQU5yq2UdpTIZm1pLN76JAYnhevVvZ3VXO8/\nmbyzApeHBw9X/lpteiCyuY909ddQT5tqP/ApWUYD6R1oxx5bdzqGs+0s2YQY\nQekFN01nBen9WnSYmcTSOnqmCzvVrVIaEiqBFaoQSTBZF8ozbrS9C2u+ksg5\ncL9+FP5QYF7Tb9bZG9BP6zmvxl2/Sxs/TYkZf3E0B7sa4LbAqAWyuf42ikmE\nTEGbDvwyvgRiTYm2zRb+755EbWDwDlSQCLhv8DHFokqhp/m/eRb+gk4D9k9L\nITeVSw0ZXUm/H7J4y7RtOT6/3QJUqrqVejGge6uSiHQutuHlm6AQaiAE9VfA\nm9Lfy7mS1ffcettoH0P8ySE/INo541Q7i27Mk8U1ioAHcPX4pse0wdeYxIm6\nWCDMoUMU5IHfZwWpfy7OxFfdZb8J70uP8vCsceCKpehr4NSaM6G4bhvTzsgC\nhiUl3iywqCw8aQUTnMDDl677zeg1j9nifrW3MylR1Iqjwnh4E9iyEpXAx8BJ\nMP+w5qC4LoSPsYkqdUaQO1QHwYgjf6BylnBjUKhTKMzql3LhX63KFU9pN50f\ndOKF\r\n=XfaN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWfRMAZ58wiY853sJu/rCQQXSA5bktnK7gPSbhDL0MQAiEAxS0EkAgjk8qXbFiTAp8cia0Pb09YYMeTxGMnILojGFc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.85_1568143190630_0.29904619314773484"},"_hasShrinkwrap":false},"3.8.86-test.1568143688591":{"name":"ts-toolbelt","version":"3.8.86-test.1568143688591","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b1c73a59b1d1176ce20c1e27489b688311371ad4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.86-test.1568143688591","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GZLDT+KrZ8k0NIK6BXJdBSKmHjIvhO6uDSQeVPLQKSrwi8gmio44McU5At2dOxG2fTI0Cl+3a3HysMxY4uoqUQ==","shasum":"69a163689ad1549e7baffdf0766fbd3fc39f4fc3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.86-test.1568143688591.tgz","fileCount":205,"unpackedSize":185518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd/lRCRA9TVsSAnZWagAA16kP/1LCBbdK8hYNKh7ZkbSS\nYwpDCq2CTjekj1x0GVfyGbU8Z9+cQQCJNoAP+vuKiDBKvls4FPgOmkLJcFjk\nuC6MoiYM/qkFEGEQ+yZI9umy/FoB87/4FmUrYpP77JoQUR817kdStfg7x3yV\n5TTA2+jEZU7aBTARtX1KTEpicBmEvCbxLvSTWB6YebnB2hFCOoI58dzhw8tJ\nMzDgdJUQ+GEHJRc00gmiHlH42hGxFmU/1/obeddDxWRvpSrXuj573ImKataJ\n5/jCSwnGwXD3L7zLFNiDk4jI4IbnWC+JBmEJvmEKSXhBPbJRytKfusBtMxXj\n8hboAGA81qHVQCM8K3jChNZhQ/SRPjbpLx/wwNhhkWe3IVKysCRnZrnVMNu9\nXMTdpzANTvS+h3y8l0xqrNuYeX2WbFZw5EuzsDGYH+8USxe0u3qSqDEyFUzB\n183DylNpco/3/s6MWwUAx2jM08V9e4vSl/zgWWwfRaOF5mWb+d5E2thDvai1\nTiBYKx3MJ/hHcKXznxdSlkrOjTLm4/eYosNkgXcW5l6g5SlCaZH776O2WQZY\n0mVfFbgi8F1y3CSc7KRePUAsvI3X4ZaRsSWWoDdjWvVzaU7JNHGN4B71AziJ\nLpyOYiwlEyD0aCxGDwbBfaPNrjWGIQYILyUz+h/y7vq+FRuTGmPkCRVQyiSa\ncPT3\r\n=PStT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUHLt+jtU8mxFO6Yzw3QU80FPAL7TEh2Rz2O1/WqwvHQIgWV4ThpsBS7hnJO8+zaQJp6hHdri584Su8+2dGPmtQlg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.86-test.1568143688591_1568143696926_0.08423458718912813"},"_hasShrinkwrap":false},"3.8.86":{"name":"ts-toolbelt","version":"3.8.86","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"b1c73a59b1d1176ce20c1e27489b688311371ad4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.86","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6fQeoZHJwbRW0+CoVF7sIx7zPFoXWN4wlN5WuNJSDidNb/j1INtw5f1JcAxVWZXxipFE05/t2XwV1JjE1P0eUg==","shasum":"fb07c8f7b841fc84b25b54cb301814c3fd36be29","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.86.tgz","fileCount":206,"unpackedSize":185499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd/pjCRA9TVsSAnZWagAAReQP/iaCA5IPW+vwc5Hr0PmH\ndyCK4tcomAmsP8zzJuHNRboqSuP+jhwD5EySLEDRj+lyiO6aMmrjB7AyVi8U\nmYgxL1W0v6MzLFU5Te3JWEw4AD2m2XX6llgwetOnUCSaWW7Y2+bxDKSa+BHQ\nTwKclW3Z+VQls0dnCjjWrHuTkbtXK8sxFhy4RkQGjMPOZ/Q/lnyii1JJHoi1\nUSKEO1Ob5Qa1riKYwlq9BdDnViRf2AWuXAiVBWDtLQdnOkaWe1T/6ap+mh98\nutPQwxeTOvcO3kH6zXOq9bOzoVIi2MuTkEm96BsYwMHyfCZAAB56qX0rcWi4\nyb2R2EzH92mEkrB9NkLTnvdFgosCfe48QcSudAkc0OmumiGbQ487JUW7KfXu\nP+f8G2KfwuOX9FxTAXSpyFHghwjqhaYsg+UBC3xUdzNu5xifcJ6nelypMpNS\n7BrIpitKdoXZucElmtyq+B44h6hhtRoNljaO2GxMHd4G030cGpvE6bEWtsPj\nGyr5Vm5/HGL3bvoTa3RL8r9+hDzGsnF5HcNgesP0uzrBa3wjUvEwwQ/rleLI\ncGYSC4DlAfwbh5drSu/3DPidjv6gFxQMZRSopXmZp3jLJsr5yvsv12AmzK6C\nMO5qiMQC5hmczipHMnSPvfO/jkd1Pmudvb0FIGnvvMHnx0yCfz6jXmqfGtNV\nuA3s\r\n=sNUo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAC31YIgfRYMu+vF28X/mXNgdrOcHdv4J6bgHbWFPR5mAiEAi18ZlRNjNl83JHjsDiyaGVDowrc3ghWdrCxYyzObL7s="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.86_1568143970420_0.5219654082505325"},"_hasShrinkwrap":false},"3.8.87-test.1568147645999":{"name":"ts-toolbelt","version":"3.8.87-test.1568147645999","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1ef3ca846a481de8e9422a7ae80c52e189a0747c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.87-test.1568147645999","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-359+5XoYhTsMgKf81yJ2aeJBBqMfcSgaGZA7omSN9Ro6vT/VqhRuXNeElEe8/uIefKDyTpYIQE6nl3SBXmBAkA==","shasum":"8823bd30b0747c8fae580bc68fa38a7da85ed447","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.87-test.1568147645999.tgz","fileCount":205,"unpackedSize":186690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeAjGCRA9TVsSAnZWagAAh1QP/j6bnxlsJ14QLj4Mx4aP\nYS+BzM6IBczAMlKoySmi3d6cuim8RWK070Ngk7vZItMTXByAFQ8LX/N2Fipv\n4UGMtcOLh1sllSPYLaXjjKZ+WZYiNRPr70+B+cOF9Yn+xC5gS4tWlYlUFhSD\nBTLUm7V0faBF+N+HahuzigzFUzLXutuabU+T9AD0iLeKYrmuVYSD1DbikrE+\nnIq9/g26be0vnlxrGrpVDOmeohFZjTjej8HWE9vGTBdvhp63+5/zECqmanCv\nBCWBIC9rGCJ+en/kGLPZHd9bmHVfwm/oDBtuXO/oZDOb6Qhm33a1DmBvCx4M\nkGh9f3y0tdY83AchHbXD4R4r7DaLdLFSxWXKioHBe4jVWCV+0XUxF0BJTYbg\nhniKHaljceiqD5dwHwRObtzQ/zFVp0BY9TBBuAs7D7ZYaESBwPfFLgMZ6vC0\n/gFyVJyWjTfG/jCjujbavFveNMET7ovUz9kBaYG7zMa0RQcMpxtdvs/q7jTU\n112B2Z9akXfqS2PMrS6aX4Atfd94w1JR49Xvyxh7vDLBepLNHv4U++qfKhDo\n6g/MvJ49HDvdpj+glWwQfRsPihgy6N+yJfVQm5vx1J8HShUVMGhaF0e/pwmN\na/B3gZ2u3si2lP/PqLRRB4mePZApwYV4l77lFK3nW0WWi9HgybWVSHd5l3NA\nm9Bx\r\n=AtqS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZOCvvSKfDGkR+UQj74wphizCuGimTYxb2r/cBEjuGqAiA0ROvLHvqnkjW20zY19eXM4P+8TVzG5mnkoEt4p3vyJg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.87-test.1568147645999_1568147654085_0.568926893163241"},"_hasShrinkwrap":false},"3.8.87":{"name":"ts-toolbelt","version":"3.8.87","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1ef3ca846a481de8e9422a7ae80c52e189a0747c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.87","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-69Mn/gTJSdGk7FSrGtqTmByZQRh6xf9yhGmfyw5cdG1s6Fm8KVd5Cge3minbgr5W4/oBQOQ8FUxm5H2sHxewag==","shasum":"9e062aefe25e096f84edaa7ce616b4bdfd0a81c9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.87.tgz","fileCount":206,"unpackedSize":186671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeAnHCRA9TVsSAnZWagAALUoP/08nrEsepldNWXSb4Q02\nSfqEJHyqXBiKWCOTIaURC9w0fI1HMmBQPrwupF6G3LRhEv7jjewMRosA3PO0\nf7j6xhudrg8m3FFAsC3AifJ5okxvdM9ub1dfVDsFyUUKJjqsXfgXBdG3hCfS\nrioTzQJ9od67K6Ho/TeE2oLJCTK8Q/NHPEG9yrQPZNIsy9tr74fw7gS7mw2T\nDlvUNlSo1K1M4U+v4NmIb8NoPXJKZEKb2gPWdN/h6ly30oAbJkcIcuAOrkfy\nnI57NoQ8FmANCB8mZeT4SEuS8WCABuj8X4H7xRWt1HfK0W4p+13Bk2WNhfXY\n/VpJQvDJjy5i6Awmk5B4iZSPIjVDvdCypFnmcDs99Z1+xYO+Qwe/U+/HT+OM\nqnS1mjTle+q/FfaGtSOWlHjt510pWDbPN/mBQKS1OUpjfVT79fcMkVO2o+Kw\nN2kPH971n0eevYStyQlbFhLyeVx61RrkzxUKuhF+uVfhzduDj/HFUuJO1UFe\n+cEnLf5TKGOtifZH1BTKfuhDrSUGMm1cC5UMRaT+IUQHkeydMzjEKEoY6sKe\neS8cYrpW5p1eS6gu7G6M5duhLr6iD7sh/2Iqd2w+gwG9qhXrBoiV/Cxd15Tz\n2DhFZDJEQrTQ1FPvxrV6oucsV3MwHXtpyamvTloMTteJlESptPrL2d8P3QML\nbzuv\r\n=rj6y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDl5wgt2cK2LnMuk7AHgaQFIz3lLJeL97Eo9GznzJaHSAIhAPRnFsSeP/4KUfxJdgU5B2EJ+3VXdNBrvEP5SvdtTz0G"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.87_1568147911121_0.6930812022677513"},"_hasShrinkwrap":false},"3.8.88-test.1568148489787":{"name":"ts-toolbelt","version":"3.8.88-test.1568148489787","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1f038a07fa62e5a79899dca3b01bf3388414f837","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.88-test.1568148489787","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+p83D9q3rWu2z5/rtFvZORDdYsyhAHhvq22mlgSYcKxni9tjqmy8zRVH0XSSgfp8/WteMJSXNinKMtx2Xg0Pdg==","shasum":"6a5424026a68eaa6016a3ec4cbca3ded1e2dd1ce","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.88-test.1568148489787.tgz","fileCount":205,"unpackedSize":186883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeAwTCRA9TVsSAnZWagAAC0MP/REkhUdHS4ei0qg158pB\nhTf095u5ksXeF51SqtHOuA07QgwD1cqQx2Kupi1es3aIJXix1IRs8E/K4QQt\n8zukKJMMfEMgkNhmnd4OnPUVCpwOpmQKbm3++AbgDcKf2pvRUM3ddAuAIf/D\n2bGedcEe28PkyohDUkD+P+xkqt8EdsUomzeQqHalNtzGBY4BfCe6TWWbTGLB\nDHA/Jx9UO7n05258eHYA7uk7r10T6xka6YXv19JjBpPsvt3bTQSQsDumjfNw\nDn0s9CJcYUb9SVekqMN+e9WIfD1jK8Jv547A6bpQKiDMFxDPDbZ6vawE8Ofs\nA4a1eRjwlDkA6ZcGaULrbmz6DmX2chHWMh9Ka0lA/ImbG7UwxVlGaKPyZxG1\nrGWxpjKGgKoWjfEXD5vYwaDFk3RdGAffd+AjUpMW9cpuY2ff22PB9BEwXOXB\nTQiGIggzNNNmcEEz5mpwsG2Mblv6loTtniOoB+BtizKDH5dsd+Pkwq85DY6x\nMEy38Es+ZbmZ7FIdWvW6wrKxc4L8/7kTXhfv0zBhJgcvPQ63kbcjXjrEvmSv\n+TyGmKPBGLjqeQW1lEFeTPj9bRYIPht7f3siCQ7JJNVQbMX7Ub1oMUKsiECA\nAefxnORDMtMTYnQOtDglNz6oZk9IUiZIm4XkzPrDmjSnEvWeoL/xC9Tc4J9B\nGyTD\r\n=vDW0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDhe1DZMXWcIg9Pyklp8jlzw92iQ2ZUuyu9jjIfUTKWiAiEAxHJl5/IBG1Or0H8m+7SBZa0IcJ7LxX7mYv8atM1zgcI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.88-test.1568148489787_1568148498449_0.18173395595947173"},"_hasShrinkwrap":false},"3.8.88":{"name":"ts-toolbelt","version":"3.8.88","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1f038a07fa62e5a79899dca3b01bf3388414f837","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.88","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5t38Bs+rwJ20l/UONQQcX4ssAVmUkRpQy5PHow1G6Shhph+h11hlXfaYX4VMroNcVZRMlr3b7lftEpGEQ/lLHA==","shasum":"7bed079c5c1fdded819acb224948de5eabca0a84","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.88.tgz","fileCount":206,"unpackedSize":186864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeA0CCRA9TVsSAnZWagAAHp4P/RjrySWeWMFIXeKb6fxm\nZ1h5SNHON7zO2xj/BOUt/iR/HVXR/HrU1oEWktMg9pjHSGxi1L6bCSFNvbPF\nx03o8Kdz3NoM82cEzlZmper+dUkPLsuNyunErAwF1EOUSknlUFG9nd3QbROr\nytNBig4iSKHxhWF6bPMllmFqPk/O7VVjBKPV6VTSCKhhZGk/U3u62v0VLz6t\nheylfrtzd/t/hJNntZ6zDns5eM4fDjb+b418ctOIwh8tFZBIJq9zcbHDrtvv\ncm/k1FmSED2GgxNS5jdoTn9ybTqXtiZ8uqk7zOIVuffYQvSAB3ciAMqZw4xj\nOe9GjKPUK7AeMqpvKt7+WNrfw74sqHCsCz4kdVRh9AteFryzDly+N0wgburp\nFcnipYN6YT3ACh4XXCEpTj8sUzctZC3uRei0C5lZIITy0lGEywqRIVwYd+jQ\n0oQUXb+EajrQP5feJgAcpyQmg9BcFI4uGFpB1eEGh6C16huLockn7cgu87bJ\nv1xzNfUuHJpPmV0EBx+d1VBuI2elWDZsrq3sMtVzxVSHJyHqVNoIr/XMPLaT\njX2PV9ZPG0djnJfchZG2U2LxeONksNtoJSkJS2SQfFEDI7UgZQo8kYzBEYbM\n7R/SvJJx5EL/L4tw625wJT3nM3n0jnE7FetoTRES4NgtU67dPmYCocI6FBAZ\npqWy\r\n=FC5g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGf4aJPhGrYWUxh9mJS9iqmvkGs4adNT7uUg3hAgpVwJAiEA6G+kCkOYMY47ZptLtb/hLs7vNE46OWypv0x7biAbjzM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.88_1568148737461_0.1328314357668703"},"_hasShrinkwrap":false},"3.8.89-test.1568150186062":{"name":"ts-toolbelt","version":"3.8.89-test.1568150186062","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e8ca587c4416b2584f6974d34ef5d5a577813959","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.89-test.1568150186062","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-V6r+YPK7YCfY/555WEzrCS0ogrM4+Gl2c59D/3O6KPM5DVa7Lqzz83Snd0WqQCNyVlCY8ADQQUGVGvjFhH8W5Q==","shasum":"7ab5a0407b7fb1876a7a2c8d98dab92245cb3b2f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.89-test.1568150186062.tgz","fileCount":205,"unpackedSize":187076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeBKzCRA9TVsSAnZWagAApNUP/iM2ffbzqgoebbIlJFL1\nqDBddgcRlg2NMYZlp4SFfaDMHI2zLGBhip78kFg4OBE1GpJHZQkdh0RLNHPo\nA/3XysvgKOhnHNoQ9Y61bpXP3m9khcWzOAvM5aNA0FivDwjR6lshk/d05hRO\nZ7YDsj7KrpjALL3u3LDyyRUB/RXXwXDzRFG3jNTKOcIenClQzzW8evnEuLwf\nDEkxI7x3AQRSsnopf7D7m3OfViGnGtd8LBoq3gdqgfZ1UuIpn2qjFO58DYzZ\nagwizFvmui4BIRxh1lq4OO5OPXAF6YAUM5Sg2Iz60zZQSTWw9ljRdOy2qOHV\nc5KNRKqPuK5n9HyQH9qJw5HiIaN5Fo1RmA9p0a1vnG1FLfKV1tBDLLwrSZr9\n13I/sYnnN5Y2xO7gfq5uKvbGFsWY/uDDvVTtkeY/xcHoVqIlf1hiE9wMmFrN\nVcgx6nTyOc2Xy+KauAgow2eFIEG62ImGvV1QzcECVySxHW31dJV53o/n171h\nC4lTfs8gELX10WySK0iwQGBX8k3QOla1+Am32hxbYX8q0HPyfGctqQo7WZTD\nRBhKCOIqsm0plAnXOQbdUakwf7ZLRTyXGjLTUSXq8CbQ5johwKhBryp1RiOJ\nn0zLbmhTGlwnJow5SGOY7yk53TR4dB6ruqg0u/amQwCWcYuRwShnaJU4VH15\ncssX\r\n=aE/d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlm5FAENcreHpIswkaOvuSC20VAf6dGV88/hNmcbK1jQIgMw4y+biDcNyexssw3vPRvPwENL1hUYvA6mgpiXs9bcM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.89-test.1568150186062_1568150194270_0.2610372401591883"},"_hasShrinkwrap":false},"3.8.89":{"name":"ts-toolbelt","version":"3.8.89","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"e8ca587c4416b2584f6974d34ef5d5a577813959","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.89","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ifYnmQdZDoWJTHK9mlx98zPQhPo9uoi8T+c0jPZ/L7kZf6H2o4Cv+enfrNlBlRtixvY8QFUYfk5hr+u5WVWQaw==","shasum":"e8ffc04c6c3355df710f9e841a1da4767060d7ca","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.89.tgz","fileCount":206,"unpackedSize":187057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeBOsCRA9TVsSAnZWagAAwuMP/1xu8aAS+Ud2/CHn1P4g\n4JOEilPt5K3SuSDlelDB+jMlhGiBD0B8kldFY6E1gTWWKj07Bb2cCOa2xMkP\ny6VOH9gHMuvd4jeQuROhWiSyXkJEZUsfT3i1hkBFHQtMfXcPvhXngzEzCqaW\ncaQozXvLZuIt35los6uyCxLND9nEedTqw/EwXDM/TEHmi4dnr9htGXYXHvw4\nxZzPc2nWuaC+eiChzWR5yIoLKVgdD9poXMSbSkthGm/7l6dZ61mKPIfZ1Csg\nyVJONNErBcG4eBHrxMmtpNdmEQhWMLMeRFaVnDnA0pQdtJVy+1T+5OyH3R3P\npf4z5pKeQCiwT9S/kNVsxdWZdxBCwnAP7IKbuosptZgQQe2znX4eCKjW6tE4\ntimZObC5XDG/mX5op4wNDlLUkaGOs3ZHDxN2abkRqs6AkXJNS13HlHkW6ljo\nzpJl4YIpIUGt71VAd03i6us8wIzb6N/Y3LWwwML0vGtzZf2quA42sa/mf7Co\nqpyR2tTTepHyPRStBCewiLnTlMZCDiOa3muzi4IgZvsFHJRLGZ7XmfH0ILqh\nLJ7q2mKNaJObaga6M48Il/EWBTxrFTOXO48WBno7TauJkHsdl0mZD7Cfm7uW\nubs0wmqEpv5i3ngslCclYwUpCBsDkZ8yCiHTUJ36Mr5SYNdtbjtCCNkGi/u+\nBVV9\r\n=dWm2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyF72Z5PZu0yxYRkD87GjYBYcHWKwvEzisuXi/WqY8ZAIgGrEgUJBuLvFM9z9wdTwOqJF1X39A5DpT3giMxYXsNkg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.89_1568150443758_0.590652799926884"},"_hasShrinkwrap":false},"3.8.90-test.1568151186295":{"name":"ts-toolbelt","version":"3.8.90-test.1568151186295","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1d66e8ce904ec1398d0fd0c9cdb6e10866690e4d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.90-test.1568151186295","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ezycwe3ifYVZNC46nwAs130hMezsqB68sJHHgjQiVY6BkcAhVMVNvf9wBzFbOQOnAVSg6QZmPhUBL9vh3lRnSw==","shasum":"3f6e342fc3fddaa2aa6e827102559e7a196c9e5b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.90-test.1568151186295.tgz","fileCount":205,"unpackedSize":187282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeBacCRA9TVsSAnZWagAAP9gP/0xSgGxkqjBHlYlglV2k\n+Fd+a2Fvau7jrtmRHCvV0JdyOW7xGpNZreR0Ks5somYxyfmu5GH5PctYNeQI\nTTl8WBQ4jcatUzzdrpJ2cwCqxhm9i84Jaapmx7duFp6QOv7+1YDPUjGLpX7A\nlfpw2MK1IDSAFXRv6gEpPmgidcBJIiSS2in/LFiiBACzWcZar0riDOsV6FAq\n48jDTLrKwQ/d8REN72tbPjHKxkLqBXJwEiwS2pXl6cB5PKO/RynLZkULhUO1\nhMDV18EXW5kF3ZxoI4hC9sh5yNftyej/pADM1HdDnIT+XABlBnMD0fyptKOi\nXlqmSj7GtVuOKL//wEIK0Ikue6oPtRZq4RidZ1epRUzilGqsokirhhm0wXD4\nLJaSZsbtES2z/7BnaWeD6C0k3uq8o2nD+fScaqUVcUA9Jg6IeuBh9WWEyPaJ\nhoAwfNfjq8GY36K3EFksgNdMuMYcJZMPj1d0HKnA51np2bDxfnzyjcOW0k/q\nJdLFBLkwAG6kHq+T7gQyvG8q6tZe7MNCxX4qz02m3xLoeSC5OMPQmL45rT17\nkSodBhYsYyC5SzEwyaa6C58P7oZK/DLWwiL+mazae5K0iAdeOVQfjxTcfISO\n1GJXsIm4wuJZWtIcVFL1lqoIjVLVRp1Kc/Omo/KBb45FLy/cjjv2OUXk+uzB\ni0Qp\r\n=tzbG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjA4QpYL6Waey7yYP5a6YWhb5BpO0uip9F9zKpDa3GrAiEA6Q/HNe3gc1tj+dUZ94ogP6zKQSmvhodHlMFUIDZoJHM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.90-test.1568151186295_1568151195384_0.9163487508360075"},"_hasShrinkwrap":false},"3.8.90":{"name":"ts-toolbelt","version":"3.8.90","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"1d66e8ce904ec1398d0fd0c9cdb6e10866690e4d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.90","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-YYS86erPsijYI17SMjCTYzTh3KzX1AhvdN6Ns7XhSf3mo3xPY+yWPAw5wBQeLkijJAUtHuRF77fzBycjTLvjAg==","shasum":"e42b7914bc9f5794abc2fbe4cfa99f72cced3b82","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.90.tgz","fileCount":206,"unpackedSize":187263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeBefCRA9TVsSAnZWagAA7EEP+wYS+9KotkGz+d8eBZy0\nDZF1RC53AZWMDOj2THfWrMpTuNAGe34vsDPqIaPEu88TFHvHmqj49gcY+hTC\nxrPsaFrepGmHVxulaqHvQjjUWBz9FM2xJhon+A2+hZZ1qk4Sx43PO9yhy0xo\n8FLHSVlIM7jOUtzS4yjZkS9WXnmpJPBGolY31CtL5+CCv9mq02ZVOx18PJ7T\nDpdl8YyqkKHpZ1dtqSRLMlPcC3Q4oeebW4QVtr00r3a2ZJLF601kHLKqsgpG\nsn8i93kf3zOgMvIWlyOt4SIsDneoL+IBRTxLdR8n/Mxf83LDI9F6/Mhh/Kth\nBprLbTE+XX1IGErf+VEtUnEW8GI6vPML3sEmwIpKPs/UbeHHJZgeFKPsXhXv\npaIrJ4CopYO+MMM0dJ9PlDxRW6okeDAwpdnf3tsP74ppENiSxmgcwRin91QJ\nXzFyRUPaHqFdv0Gb1poW4rB+lTLoVLgmySVpyb7isbrvCtE9ibT1W6CKEy8d\ng8t1RlYQDlxJDdYzdRhrxsnopaUBkRfHqRvCGaKnbl1inmhaCTDAFvDYYXYx\nCKwX1Hz9o+OeF2Ec5zu/aCLjI/Yrjy/8cH1qtdQT61F5wI3bcp+5SgCBLnNf\ne5WTlIyF565hpNclELfuxTkOTAqitPIABpX3qyUBZh8hAUNiHZtxCMH933S0\nLs51\r\n=5h0l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6bUfTt0qq/KrstMtY6cwcWuGFIVtGbWnr4jGVNhtICQIhAI6JriggN/tsvQnRTQYPU+TGaNZ4z8yG7IJcCap2RJMa"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.90_1568151454327_0.3500390864714522"},"_hasShrinkwrap":false},"3.8.91-test.1568156719916":{"name":"ts-toolbelt","version":"3.8.91-test.1568156719916","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"f3e6245e5427fc11966eb0b363ea22b932b65fec","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.91-test.1568156719916","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-j0NJqmURswxNJ5i9a0Y+dewlKcrxYR6YYuAGawCdprbEi5icydDBWIb8jVYs2Jk8/gMft6rRICxmPmEfSGyY5g==","shasum":"5efc39a2531c8a7421461d53ff8cd50c22f12607","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.91-test.1568156719916.tgz","fileCount":205,"unpackedSize":187579,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeCw5CRA9TVsSAnZWagAAuIsP/1b4npbHrX2375vaRxkH\nL53R1Uh58E7ORKoLPWG2tthKsZbx0ct6ICfyPmN+s4rZOT3mBRPXOU4G9TH/\n1T05iWfKAV8KGZKtf55OMcT4N12qhv/lrdhC7/hPCTEqjpEHOE3EYnf8m50s\njRW2n4HjZ/TZPSUOvcu3aFjmHXlemfXv2VPsqK2UEMh1H0dfREHc0lFvbq2A\n48yB00stwxMlZuJqklRnh0cUl7U/1JUiA1qIZvmdK6WQsIZl2LB9dnJz6LKt\nF6j4lMenj6nuKfH8PqnoxJQj/oWf81LGKUlhhvxIBmAfRZnOGLRi4k4OgA3a\nusOmSa71Es1K0zqkSlSn/NM2CvuZ6xYyvKBNLGBflZIRs6mG5G116e57l9ie\nrI7UR9g7kqaUXvc13FylZz9C6sS/JbERqArOE9SyKXpAvpVRWqdbMnvuWBDh\nScEWB6WswOhLEkT/fCteU2Iwf1BQrLmfPeWiwPGT8lK+dPDdDgjY5wE4RacO\nGQlSu2WLz3HRfafprHMMYf42TCpNbiwNeyHw1x0s1eAopBKKr+cvTqV8E0/I\nCZtEz5yJl5jiKEgrfJgvbrpPXIagDUWK1IdKtD1vm0eb4yZJaLAV7lJdKIYp\npcTQ4/DyNg8C3Fj6U6VDvA48vzlG9JDytkD6HywlbXTZfwKGVayJfnu8CMzR\nVgzd\r\n=EUqn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvU8APN8bT0Vcjwis/VtBvwnbjydI2QpRO16Vu12wrUwIgCzxybmr/MVeIhtWF0YWZzXJikKoNYAY+JMN3gx2sm9k="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.91-test.1568156719916_1568156728648_0.430050867206464"},"_hasShrinkwrap":false},"3.8.91":{"name":"ts-toolbelt","version":"3.8.91","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"peerDependencies":{"typescript":"^3.5.0"},"gitHead":"f3e6245e5427fc11966eb0b363ea22b932b65fec","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.91","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-HVY9kFtQCtAfuHPf8XK9BWzwUueGtviZ5i/x6hu9uMIy+PWqlwjD1eqRTBaCewOclR5w07j1bgaT7cWNWrJgZw==","shasum":"53ef2c768a3f2f28eb93917d234bdb94a01225d9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.91.tgz","fileCount":206,"unpackedSize":187560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeC0mCRA9TVsSAnZWagAAtIkP/08CkPlfqXGDg+zjon83\nzzJbgtJMWo0z4lkN/VMtjMV8NNKc2q0DbtbI0XEeEViR2WboNP+9++ac01Do\namSP/tAaiWdhU+bxiYiQo3WQyGmcMnHoaAQTaeSGXmB4ib0GCT3EXNgaEUu9\nqKEhZBSLpBak1VAtwXeTo/xeeMhERhScF171LEStAKGXRPzTmukwTPKlPNXF\nGwTpWjXJTMzG6YDWYVXueRzls6ggEPV88KLOJrTbKDMta+5bIUY4e5AlYfBd\ntWM6aVuOZ0Idk5JACNeZjXzXja+yhXIjspBgyC+kBkWRVa61fBh39wVM2KC1\nD0fYexvpqNnybJFMP35YipJuNI+MQfptpjRNe3sAKAL3dWyVonSWwwXa8Ijn\n/XlcUtrO2IJr48+sZ7xMa9qsQFjJ3ynKr+YJP7zEviEzwFdGfQmO0wkXUgX5\nbnLda2lD7SV5MIPil6KX2XEIACO9eQQ1oapmdwgF8XRVAocWe9JW8EBEdKk5\nUImF66UZCBkBH6C+UJC710NwOvVjELtzPlPHxtLehmVvIPb6tlMUlNf9O6Qa\nCQtg+nE3sUUHh3JUE5+D+6+hLNEpLFp4U12paRBlSarx3oYcZnWd+715kEY6\nLgU1+0dojrCruxbnD7AtZKucIA5Gkkdab31JmNiUe2JmRvZR2zPs3geHpFFC\n80j4\r\n=p06G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH2zyRuK+yZXGARMMNYAai35zLOXbHZW7BjTgW+T7rhmAiEAmWEtv1u/GNlb4qwefGYaMsebU3JDCX242B30bS+YU3w="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.91_1568156965971_0.1887719782982218"},"_hasShrinkwrap":false},"3.8.91-test.1568293079340":{"name":"ts-toolbelt","version":"3.8.91-test.1568293079340","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"9584e86fb301650ae5c0fdb2212fa933229e6654","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175**\ntested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of\n**features** to TypeScript. It uses the type system itself for TypeScript to\ncompute more complex types. In other words, its API exposes types that trade\n**CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**(boolean)     | **C**(lass)  | **F**(unction) | **I**(teration) | **N**(umber) |\n| **O**(bject) | **O**(bject).**P** | **S**(tring) | **T**(uple)    | **U**(nion)     | Test         |\n\n**The documentation is complete but needs more examples**. So feel free to [ask for\nexamples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md),\nand I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get\nyou on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your\nquestions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to\nlearn, inspire, and create. Any contributions you make are **greatly appreciated**.\nThere are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.91-test.1568293079340","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-DBAlECzGG5O/+v2VXeUBb8zQ+L8YDudLJF27nuAVTMYU+O81SADwZQ8c5GkHpuTpIDGumDjxDARgpCk3p9rr4g==","shasum":"807e5e1b8fc2d9c6597f780be91e39e737ac545f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.91-test.1568293079340.tgz","fileCount":205,"unpackedSize":187523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdekDiCRA9TVsSAnZWagAAI+sQAJnIU9LWyBVKZ7lTicDG\n0FBl9X9NNandvg/f+BPU4UL/3vnbUnvcTxDaoGlmkZoff8SOBLsuG3ahngEn\n/fr4UWLNtEd3+R9o14QZ33bWhK5srh6qkO/XibgjuWaw2epo8Cd/Ap8gG6tm\naUbvD2tJubWY6yo3BApA3n4PrKQk38ChhCqKAh1ueJUykYwYOKEHpF3p4HmA\nc2B8Y4KvLJ7+tgcyHntSLHbo5Wrm5luSTrsUGOyO4q7iVdciwPbFYeG4gq0f\nLGYFDtTOzDNExVUjAfEKIXIC2llc+XgWu35cu++aUKH2hVGo2uOH1acFE6TG\nMf40Kpxs8PDgv0D97zlGUt1bcJDcUdlSP/TiOBlW8hQaGcBD1B2ZwFZsgmLI\nmXAHLSR99uRrAEpXN35z3LtPVXDMFlBePpXeqrf/nRexVEbGU6XZGHt7MCsp\n7lWHLWUIabiQHoovFVKEbtk2MrWOD9X1jiHRrTD4m8qreqzNsVqdvoYByJ7q\nZljk9tSfqWlfmGd700pyomddMRC08rZ8tD/seLJhzf39LOPxgSh2+XS1QVIN\nkhSOZ6/daEFdwDPU0V3wIZxkqeBDjU8sqyGOVpOKHPetKcqqV1C7pGjzQqqA\n7PYyyqPt89fot0epS51ww95/CrDjvwyiuFFpwMlr+YCVw01KkuxuMh9cEj1E\nWSzq\r\n=ZgTd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEzkDzi0WLKmpOLa36KqpZwZ3xCIXJZPN+7HkQsF+wUwIhANB/QUmVmdhy5SdXgYPFnKrS19FkmdtToz8KunseKfaW"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.91-test.1568293079340_1568293089885_0.19593072581469229"},"_hasShrinkwrap":false},"3.8.92-test.1568297379526":{"name":"ts-toolbelt","version":"3.8.92-test.1568297379526","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"ddccdeca219d28c31dd3e1746ff5a56353744063","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** Match the type you need to operate on to the categories right above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.92-test.1568297379526","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-u5nPD8dJW43JiohMsmgaXiPbmAIXcoAzU9HGYRDvlH3OOVwPoUsEUGupSpli0EtkeKMTBU0shz/GokO4I+y0kA==","shasum":"59c6981c5ba12ad866d4b177f25416770adaece2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.92-test.1568297379526.tgz","fileCount":205,"unpackedSize":187973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdelGsCRA9TVsSAnZWagAAaPsP/Au1N6ptOWzW+AtAqsw9\nG7SoIZjYm0MLzMB+BT4Z4PqUPuHwWcchhPr6nRUA03+oWPP2PKxXMie56YcC\nhjn7uthVgQo1Rn6U3RoY7ofwrWPhp6NQH6xYTQM3aKcR5AbYkIwATK/DaHWK\nmQtFdlBNhl9N+VY0Hchj9yd9HTRY9NkGw1RP/+ISuVusbWT+S7IjCZcjjbPp\nnGeG9Nj6cBQzgXJCu0angzKm5u+qhOUShwriOQNyQh0r+EjaSN0OdG2to9/g\n4UzN0q6vvFHsuJ4VZ1RJaopzSUg4OG9oHUNFdSGYKydZ4tWSyt4M6h9Q8d84\n5bA6aUcxwGyp9ldk0qDFNDS6Gle1RjlCua0vL4+ZhZlQ9z9e+jS7oJFyJS+q\nY24kj07SbI5mqAJE+2t2XIK/6xMwqEwsK9kuWeMHNis7GtmMNs19TO/OaCES\nTWfwZ4lN4AzJctqN1PLW65CBKKX20voiF5iWsguZafbanclsb335ntHjxMpW\nU5QWGHoLF/gWhoA03UUSIjDDvHM5dzmGc99LCVW+Nw7nsDMyXsb4/qmLLT7F\nms/H3zj72JpGgY4a3wmKcmdyuGD/gPmf4CE9WFMbkmH6sFlDT3CwB8+I6xKe\nfTB86KpZvYdpU//qPnRPx9YCj1RHQ0UwRPpaJqZhOp2zdCm+oM0fk4neK7Ek\nsFMZ\r\n=4sY5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFV+l7vccwoz0TaQgG5njZ0hXxpIn/xmGE+Vh26LY0iYAiB5MHQ9ipYhG3jhumasO8dp4H8/BiOn2qfOMXApF5sAJQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.92-test.1568297379526_1568297388264_0.5355781976317897"},"_hasShrinkwrap":false},"3.8.92":{"name":"ts-toolbelt","version":"3.8.92","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"ddccdeca219d28c31dd3e1746ff5a56353744063","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.92","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-8weyhjSrpxBdkcSZF4qV6aq/q7S795dKS3SWxGhAs7msilb3eVN8ozuXBlDR5ivQVFvp9cfgwXb+Nb4aKEg0tg==","shasum":"2ab4c4de478447812d17a46a877466110bc719c7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.92.tgz","fileCount":206,"unpackedSize":187954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdelKaCRA9TVsSAnZWagAAdO4P/jcWRuuDXqzmFNDjA9ei\nU37KlrcJNtX0ikvBA5ZdDBA1ABZD74qii9LtC2U+qsKA2tQdUM0VyZ5n5IkQ\n7OO3ZHla1f2otqRnZ9eLlxgkdRajHjTiYPxE/bT56JX1VF9zQ9EcsdTgp0fs\nlvfEXh06jNmiLeBfHGEmaUidjKt2OChMG5mhH32QQRHTg5GlKkb9Ln3WwBoK\nin9w3aqqx20GkjJNM2fG08TBkRiYXPfTF5r0dKOqxvjrAHvxbF8OIdFTi8QY\npG0ciha+iBLymmO65/OaWzBvoWycCCNsorOSuS1JFp1DlhjaLLMD5PYsLbyH\ng694LobnWivrFCZX++DqOnsCPBFo1UU5LeqFJyJKWuWb2LqoXYhJg0HyxXz5\nsYdLbY5raAtsbcvrCca5m1x7RHoRHhsAGLiMSrh7oNs/lZrfTwxrgnPklr7f\nzYB1tYuW+309dWEndgWF9+yv+HGCYQMQLUvWFKUFgMyUcpt6Npl6Kbggk4K0\nbMMT2gZ357fFZLd/pjhqG1aygs6E/2fJdrhhg3R75ViU6pnR6uMD/DIdWTUz\np8PWYZaOGgA2Iohvz7xunuWBFuEnF7ZRv3dMcsSYDv1W3X/DdT8/oFlyBVPI\nrnoajuGH8hbGxJXWTFixt0lMmllQ9CVryVLR4LrfML+iGanDejGua/YB3EW+\n8knn\r\n=fT5r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCs/z3hAVr/DwJpXl/2NjqMiL+Cd7PJyIQsiQlBGVZHlwIgJKxjPNRiYnwYu22gIImWriu0H5dRH36TF/9EqE4jaKM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.92_1568297625943_0.08655916472102332"},"_hasShrinkwrap":false},"3.8.92-test.1568305714629":{"name":"ts-toolbelt","version":"3.8.92-test.1568305714629","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"57c5609f9738ee9771baacc643943ba238a346d4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.92-test.1568305714629","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-If2vdiYKK5HGj4+xbz8XPuThuIynhcbWu6bAypO6yUMB1rwuQVGFojoWcoOmYcK2WQOwz3nonZB28aD705eM0g==","shasum":"9ec622922870d4be1ae4e43ff39bd28c1b403f8c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.92-test.1568305714629.tgz","fileCount":205,"unpackedSize":187974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdenI8CRA9TVsSAnZWagAASfsP+gLUJWMzKipuvXR/j6Js\nru3lK/fA7JLzuJKB0JCQfENlxjO77Kz3A3DW9BQAFa+JJugHNO1HIJMgjBup\nKFrg6VP2YUzdpjHzQW2vPiFQhsMvrgx5ggZ4NuEgqPKcYV1Kml+jS3n8qDQH\nGr0RWt0kC8sR6ZuaCJh0ZoIS/5n9JzG1bOe8O8E8IeFPIvUhTooXhD5aGlFk\nO1ZrgBBNvQkj5/FbK87DsinoXxPAJ3zM/Im82UmPw3wLcESDpRza/0Hrvdwy\nW/qJzF2pG/t22TxhjdQCaG5FJMtpIUfvHPF0Z1fw8hX2pXgBJ/eqog/RpSM4\nIGsK4H3Z7PxQOofLrY3jEmI3kxY0wGL3dKoz5ea+Cd3xNixgpGOQRNtKAMkL\nevAtCHSjkIABcI4gJXQ8BL15fDI1mYinc2B+VmTU8hs5hcjVlBEOf73lAM5I\neLj3pvH6tBnqHPJJ4vewCXSTj4Kli3U25M9HJo0r8HYMe+KiXSkYNaENEMqa\nfbp3NSKlND3cVDuV6Xcp7q/jcGcEyTs4FyFd28WXKXIzBkFTEIaeircYR54a\n5TsgfM9FLFpMqYFSbc662+M6yBU5CLxDW5a3W7FlAqaA/Ln5CQBi8CrfLHeG\nVz0zYWKCvIDNz+PYaLoKLggzg4KuU6bSS5W8nQpXuMm96w9cnoANlc/1ZJZH\n29f2\r\n=wDsp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEF2lxN/wwGt4IjC+8jmytaf7+jKkwkO5/pvEqx60mV7AiB6Su9w+T8n74+4VSipFKYkyta8jMvC0IP5rLn6ESwUTg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.92-test.1568305714629_1568305724092_0.10008450447542261"},"_hasShrinkwrap":false},"3.8.95-test.1568390842261":{"name":"ts-toolbelt","version":"3.8.95-test.1568390842261","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"e6277c5abb1edc82f2bc19e0c5238f7a564091c6","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.95-test.1568390842261","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uX4XHB60cEsNXhbiHo8XVOLVEcXDl6XaX4aHMsRYdEubNnCBeboq6nfyz9FRCe5mJY76VISnK9Jn1XB3jn8o1A==","shasum":"cdc890c6136b1a530c38aa5c5aff62ea25b89556","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.95-test.1568390842261.tgz","fileCount":205,"unpackedSize":188835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJde77RCRA9TVsSAnZWagAA834P/jmcDlpilmEq+ybX+88R\nabW8kftjIwsrO5bwHfw8h+7k+3Egu+a1lzvSHwssvEeb6/VO2NFoZ9rB8jGa\nAwxU4MGpehHHWb5FM+LHL6u0NGQeAUbVZ6pGCEm5wdp2Qx6v7+ZZ41EU10yZ\ntDu+auAVExoRPsKDfx0+z30ZfBPoXkMAQjeUyIx74DT4blA3/SMT6YFK7U5X\nqyW3NmMW9AXCwRD59PKHouDYQU+0OXx/rmhe4xLCHz3ZTw2pcG/+Xmm0Oxml\nhrUPUYKu+3j2sutifWxq1e87v+QIGC2dDEjlMEJrkwVZcIxM21OOgN7Tg35p\nKMk2Tnr23iPNgSW1zn4bLYRCdQVeXoswr6v2tfJ56Pg58DOOzQ/6XH9+7AjO\nzrTZ1Q30M4tRsvZ/I1/706DIPgW8GttVBVSbuncUh60Xcl/qvXWhlnyyby/p\n7b8T56QiUBzEAO2SYhe075aPDBVSHYSeIM2GjapUEqchQJTU+nxSW+yEN7h7\nqub1cYz5emDAUx4QVkBFcfoEq1/XSOULFdb6JqFuWPHP8zk6Fg+92iyyZI0+\nTdI4sQCGqsfM9a16NDtPaOacKtVhMVoJ95kQBtP5pK4wS4hnigWwolUpha+p\nQMEpjo6tmqc9EVFtzhbxLPk8Id4KncSZGdxwRakngteYFMEheUJabyuzUSTi\nl8uJ\r\n=ONhx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDovGdmChozO502YFkpT2GiDG884XEMZVjiQ4Ql3xS3AiEAhAzRvEU5jE0oas7PwDJOOcUMOmFIYNKAoGl766euWW8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.95-test.1568390842261_1568390863325_0.1413113885417392"},"_hasShrinkwrap":false},"3.8.95":{"name":"ts-toolbelt","version":"3.8.95","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"e6277c5abb1edc82f2bc19e0c5238f7a564091c6","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.8.95","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-RBGESeCCpNfLLJoVh2c33J73xmRTKlxHXCw7/OaOEUgtSq4U4mVzAGfkq99JeE+iq50cO3D3xTZO6cmv45vH0w==","shasum":"b8edebfb9b372216cdb39a1726503f1eeb8ed99f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.8.95.tgz","fileCount":206,"unpackedSize":188816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJde7+8CRA9TVsSAnZWagAAt5UP/j0Um/y3bswFybZFuJmB\n2INO6Fcg6xa618Ze9Bam96M/vst0CMZyNotuq1Ta7YBNJ/myfPbZzy1rvQ2A\nCiQRKWwHqcVtWoUA3ZGdd8a+WuarkYymyvVzSJ8ltvfz3VvBYxhuMjDImzA6\nL8xEczvu27K1RoFrLC9I1ddZDNP0vJeY2uNI3z+SPXjGJ1nKg+9uX7vr45R4\nsMP7V5IGIvYvjw/kTCmTMMyEZBW8m/qcz8XtMJuHbAuz5sEzHjabQmlPmcHA\n5FI8Y8ZNUw13yZsK09RrBUuNJCaUIj7y64W1cDPQupLj7VFcUFD4zcEmtq4p\nDYsu3ms4cWqzSzLN9mXMYn8iYhcymfQ2G0DQ+fEhFH2dHQJQtQC8byolHIWt\nML7B2Z6H2GPc0AjE6TgLMKC2dZPk3UQgYru7BILVJ25CTTaIPP/tSe2OEXBR\nMkimszeMFOgYZ6YJ40VVpjorAdqmlrKzVC6P4+SKkCLm7J5Dgu7rRFpXSezO\nYo3g4G8TFpYIpKLEvkt7Hdm6htqyXMqu4UNN+KWgmiwTz2OaxjIjFGHLs+EI\nt5KZ2cTR6ZZZuPbXHsL2n4aTdMjjclHhCL0+3/3H4e1xNzU7fKlVzp8j0Cpp\nawvJlv4YzhqTFY5QELjvZA7Rm9zHZNvtJTKLDioGeKogj0WQXTymQs8M8KD4\nZ8Vg\r\n=wBaN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9f4qp6GphxZJQwVPPhVvcbcecgx4ThVRRBlifz6R5SAiEAuh89CCsDXR41fj5BqPWK0sveas5Yy4JBTM2SNIVmTAw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.8.95_1568391099765_0.06111185615083947"},"_hasShrinkwrap":false},"3.9.0-test.1568483302539":{"name":"ts-toolbelt","version":"3.9.0-test.1568483302539","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"d6629c48ce046e704dcbc81560873709bf6df6a3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.9.0-test.1568483302539","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-fv2mOYccxacDMXoweyDmpcRIewtUKpU6oUiG2cj0zD+cv9HVJZ0bEPs/NOVG3ZhoKW2NuwWm+0/Onn7HB8dJaA==","shasum":"1b1f0ef79be2a43f65f250fb1563cd83fbf5cd0b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.9.0-test.1568483302539.tgz","fileCount":205,"unpackedSize":190129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfSfwCRA9TVsSAnZWagAAzUwP/imDSTbAffGK8qNLJGoV\nSYyV9VvWmQeBJ5/LxxZd9Kw9tr3R+pTPk1BPFtYI1sErKWFExP86ko8hD9yT\nge36enOmFVzX2GBgfFQ5VDKZXe+2439YICD2/0FDzxkjAz2/67oqBOivMYs/\nxzUjspgtxaZBz25VlTezHpy+6eeLRefL8oLqy5u1fDMYkGaWq/yLE6YmZCll\nqISbCvv4qzrVYXWgsShAD72NtWMjRe4PLWqu3BArKoKUhieBy/HwNOvvfnFA\nMWZhtTxBsjRBIheun4DjRJaDoCaYcsG5gluN/2y3KfKVH1Q13Z/Fro2utbX2\n/CI8j84Bey10EiQaOfwciID1PkeXd0FKCG/pZr2opYPd5iIofTMVcy/D4EjH\nOuisG0xVE6KDmcA9Qi0Hqtu8uVX/D5yYAvljQzZINis1ixUvFBYgO6avj/7u\nYmEfHvhB3lrey2Itc/hTwzJsrfXFLg4V6Pe1stUsJ++JZOWDtfaSSaCvBHNv\nptnts8didc/fjmKlHkqFUT3joC0jHPPR2MSE+1j8Y+6Io3NxSvt8At46cFwR\nA3olSWqHccVdP0az+/Kcnr5/9Ip25GPTWLmC+yeJVOUo9MakLxG3C5LH1NRB\nfXwWrIwG01lYb7rKYbkNODbGZ68IrMVTyNHpMM3yjIe9ktTBJliQ1kdsStH+\nigzK\r\n=fcJ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAJS/oif179LYS2DciVWbGhDydJBQGe3SlQcpGPBDzVZAiAbMfDhMbu8xaUlmyTFx2FiZPE+Kp4NVdbGx1MVH2yoSQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.9.0-test.1568483302539_1568483311704_0.5467242007376041"},"_hasShrinkwrap":false},"3.9.1-test.1568483409617":{"name":"ts-toolbelt","version":"3.9.1-test.1568483409617","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"62e28bb1c3f230ee49b0a05a2b9f3b6156a795c0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.9.1-test.1568483409617","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-1wLkhnRw/v2X2e5xYj7Rmellaw+003GkYYV3xKXk6DEdGHqE/KHx01lLJPV9xK+x7cm1MBFOh9TUfjl4mMNHow==","shasum":"b9f0f17ea10d9112e2f2d88b1cf08fa40d54a3ca","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.9.1-test.1568483409617.tgz","fileCount":205,"unpackedSize":190319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfShbCRA9TVsSAnZWagAAwfEQAIULTpr58I86qzADiy9L\nBpIYyKNsOGqlkwmmGyTYhxRn0ndvddiE98lr1oTnCog4mfocDyQRSVN3dHyF\nbgp39XLK8hsCfV9EIwdn0X1uCskf1VqWnnMX2/Jnyg9OYBd/5qFfDo8+5xGe\nJj6+8fsVIoaW1yEzxH4TrAela4RuF0caJBovuPMXWX/MQfrztyUYUTlZQfaR\nls/QiOcic5mPx+xBGrDUWG1Ic/ITqx117chwRCIyOvDPj7UuCqmRM7vVof+P\nqRycVZiTVfwH0L47l8a6d8fmuFeOivyPLQcjUsAo9ccUyrhuJNb1f0BHTgfn\n1XwL18ruz+TDG4YioayDLBqKuv4WoBkHLKy1K1zXP0+b9Bsza5hA/WDQE0cJ\nc+f0bdcSuWTILfCSjK/Kg7oFclBgqc/+3lEZgLPxwJOcXE4suszIItFHzCqt\nvfGCBQSLKCgOouVbFPiTuSNfMotyWGE31gcf9wJaUQHyUxXcQHNHC8a/O4An\n3EFbv2uvpzlGtZKMhKMAcP4Sjv4npx4/l4ivpJqerst6pWlyjMzaXOAk4QRe\nOxEU/AXh1+xD+ay45S6al8sr+Do4EhhcHNU0UbjifYcOQdUOsf3OO5sd0dzl\nY2iq0Otb3JrjDTtPJ68k8i9OCWPzRz9XW/pR8GN/x2J976U6LskC56WDob6a\nURjr\r\n=a6AA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHut2lsR+RJMhXYAMjbBEUE00heiwrm5S9a8LF2ZCdywAiEAtZXL5VVt86A5FWRIXW1tczIy/NXm6q8IZ8k/4ai+Pkc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.9.1-test.1568483409617_1568483418287_0.18495699754809292"},"_hasShrinkwrap":false},"3.9.0":{"name":"ts-toolbelt","version":"3.9.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"d6629c48ce046e704dcbc81560873709bf6df6a3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.9.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-kEgPE2iLX3sgnnHd9uTkFOWPa4xiTsjbpIsVn6P1w1jCVvWoe5OmF13VEH8hBY/5oXu8rsfRn+XXVveFBplPQw==","shasum":"d78d1b4c1b8507ba08105023b1830ac09bcc290b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.9.0.tgz","fileCount":206,"unpackedSize":190110,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfSjvCRA9TVsSAnZWagAAqq0P/iM03F2ipyZ8fDttmzhb\njVcnYZFPGIs2Nlxi6q7lipjUdQ3U4E9Vw17yrGtamx33tmNuHA8nYyIsubBK\n1DJZgaaIAqQ1lM9D9NoHO7nlsuSjeAfht8O4i3VDpcZH+CTsBgYRfQzJTew7\nBUJC491+/mi17emGzFwYhOTq3FzRrGg7vxLCx9rfqalzqOM6GduEDnxL33JG\nb4r6BG66SzLIxGx0F0jRR7YXsTxQ8gh2kdL+tQ4vYtKk9UgDrn5YlK+7ssTD\nz3Cpqz4vN7be9gSXSD7smV2FyU4BaEwPBwkN2jrX9hp0eJdniYywu1uWI9GC\noA05YezljkrvIVXitpzLMZxMhjZiU+Bety5qwDX+KByWi5GsbzjoVNp3TP3T\nf2ss/jyGDiwCUXLGwp0tQFrRH7Ur/ganC+PI5om8Opmf3JSoQqgXBlLuTNTY\n3nAFXwJ38hiPtGEOE4lWk3taO2d9Y+jl79G/f3+hd/wMI0ELZmm0N1KQE/oD\n0aAe9+YWIVS0+5duq0UHeesmvQEHrmD50pURwbMepFE3UvbCyk0V0u+MH/3W\nCyIKNOjbgCKgg4p/zq2BzLziEJNzzACVh1wgAi1Ojx1zbFCTwN0+axU6i3ol\n3SpdjKuvum2TliYInilM85NDvujiRYlerj0hP8itOjs25Y77x1NUMGqythME\nmK19\r\n=4kgl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGF3ZTkCNBFEMpR02d5e0H2qBLdbjXQIYoQGYrr7ywjSAiEAjqPwsxqpqfaC0ZD2bOBB1TmZCvh23mE+U5Sf2e2Pf7Y="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.9.0_1568483566791_0.9963464404165547"},"_hasShrinkwrap":false},"3.9.1":{"name":"ts-toolbelt","version":"3.9.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"62e28bb1c3f230ee49b0a05a2b9f3b6156a795c0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.9.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xa9HGrZ8SgQLn1CovoTt83Un2BYMRpbfzB3oe41HXmBFnt4ibPO+k6EXJbwoLFMdsFfS9HzONo6Ynen542PvPw==","shasum":"430827d44d9727c405eb8c95dcff4794d6bbad0c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.9.1.tgz","fileCount":206,"unpackedSize":190300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfSlXCRA9TVsSAnZWagAAK40P/iP33q8U6bCvGVuwkwpD\nFMmkDtahjnawiMz2q++67M+y6qTt3f0cDpp291GxLSo2hLQr15N2WIoqq9/S\nx5vYafEBqCRGCjC3HHZwuOt8VkU+7qOnwg7TBI6WqF9bcvEQbOhT16NSkAuH\nSpNuf4q0NlJP/YeH21EV/jro0Z7w6kXKLZTqlwu+WirPepVcdoMznTm2Dy0A\n4mjL799QuSqakNFDEqxXEZ0lj0Czx+Z+jTooPyCEciEkqMI7pGxUgOTtjrnl\nQx3wD69WItb5sjATGoH63kzVNzj4kBovpcwqAVb71PoXKg1BBF3nSlEIHCfM\nMRRdinKofp0EGeAaQ8xSifdwBg3m7N3HLm/RvaqC/LP18EU2eurad1tAiYe+\nHseMT7ZbVS9yczOsMM7DiaZHTQpHVRYv8MxKyvw1c3QsAvPLc/6Ltea3LOys\nGuG1ppimKn2T2bTF5TGzZwOE7+rSUDoqJYAwzt+nTnnZIb3suNnzMM6PZrMy\npXpCxmNbf9JX96TirP7yruUPah4EDafjvlK7MntlfuMd8C2G9Ryjs2noxM74\nid8z7r+l+K3ftZ6LnI+5HWOP4teWcS82PRpB2xE/fDGBo8gLKb6dvL55ogru\n1h515TMXVs5TmYTxtu/LYsUbdN9sc2cgDjiXk6L7uoMx+RoAkhEaurJRI57s\nikmP\r\n=j65U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLxZRXjBPkbJyraK5qjrGp6oJ+m54+ayCV5Anf28/62AIgSRYsDqrof6uAHtew48mFV42RC2g0VSk7rn7+6jz2GK4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.9.1_1568483671179_0.5762908428566031"},"_hasShrinkwrap":false},"3.9.2-test.1568484003119":{"name":"ts-toolbelt","version":"3.9.2-test.1568484003119","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"8011f80c09058c596ffe7173b6b1213e22af84ad","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.9.2-test.1568484003119","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bdUMU6LGosfHSe8i7Za+Srvax9DWH/9Tr2pwi1TzvpCMH0RQuKdMhFkxmS2P/fReIGbWk+bsaerEAcOCqjKgdQ==","shasum":"0cf2820a6f88666e406b71145af1c2e9c7ba04e4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.9.2-test.1568484003119.tgz","fileCount":205,"unpackedSize":190563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfSqsCRA9TVsSAnZWagAAUKQP/j3jgR9JJy0b2qjQDCT6\n5vXhgkkF8JYTOlRUaJs/BW86NyJYI1n+Ke8JnW/+NYmn5tc+Wq4lDhb0qXDR\nw1HqpLymdTGFME87x0de1nlD1KOnT/DXKCrMhfEetiFj0rD8sIH9hSUm8vst\nzEQuRPP0ODC0sdjt+S9asOR+DAV0XlDKPjmdZUxXoBMAz9c7KymMxc93kCYg\nvFKeGnfodNdJyosYl+j99Rb1qm1gBJ08yd9FZcy4/2pkI0r7Cj2+piJlh8XU\nJwRQTtWoEqweAI5Jetw37jym8if522UIf1BM/oFK6zAxs72hWfOQ5QaQvXp/\nINCIBpUW+uL6UdfB9fTE1nPfCSMOl2GL58t0Qyl4aj3wignMdAAKGEkwURDN\nbLtGpybOR/PWL5vfHeCYTVxIJojSIT/v/IkjiLxUMtbIB4w64W9NaMpWS3Sx\nItN6OTh5Ti5Ftbv51mhwKfqvAwYyErRVNN3u9nZY3/vbo9ldkrZ9pOlnS+wz\nwtMEr+jxxpDyeGdBefwegrHppzY5qMwySH7uCLl9OVFizL5VV26RAmPXqZxw\nJtou67Nt2vaZgMDq+TEMjelVZRyG9EHd5gbNvbBtbgRrKpMn7eGSv0z4Kogs\njWbHRagEgp6DIYdcJZZH16FTwR1vCtOMCtkDCw/DH63LDmkt+rLtock80T0x\nZdZ6\r\n=Hg22\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDUt8ErmQ120hmg9yRYnml/cjvBTxsGbBK0qI7ud/p+9AiBE56yGmVtjQa7R4uoPYmu1ym36QJWhJ9ZxSIiO139mOQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.9.2-test.1568484003119_1568484011188_0.28867382640608885"},"_hasShrinkwrap":false},"3.9.2":{"name":"ts-toolbelt","version":"3.9.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"8011f80c09058c596ffe7173b6b1213e22af84ad","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.9.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9vNqN6qJksKGEfutkJBR8GiTgKYVykv7HSO3556QmPvyu0T7D7x6kAUd2xJqi3vm6uPic5qXl54MIrsybHBddw==","shasum":"fa6f63e3eff1177f8c36fae0e8659b0d9733b2dd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.9.2.tgz","fileCount":206,"unpackedSize":190544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfSuPCRA9TVsSAnZWagAABzYQAIlkgXBCB8/7wr6QV+TZ\nR9AZOW3yu38XMCePa2TKZ7fBNxG3LsurJ9F1Y+vvnBBcZURN/FxrQCrev5Iw\nI+u+ESaLR/BE6v5LwY42oTO3n9g299KfFLJpme/XegE1g3CDK814dq8G2gNs\nSKe5ymQgYzbgPYJTJDs/Qi2YlN3NzS6X6L6lufMMDxuzF24tvcgH6IeKCW1S\nf18aq5itWa9Tr99QswC7zIQvgOv+SUeH4E99AMa7F+gSWyrM+bpJZcHb+INe\nKeTiEECKq+CwEIzr2G83Hz8MVsCJJjWdk9l1v3rNQd47vcUoz6ivF/IW05us\n3862TINRfpAAkpjqAhxpbFZyVXcNDafo3McdB630lI0qDuSlx1K+pZ6lW0Cq\nhxrOBdC/zS440ZI8EfmwU5r/53Kv9CRcVUyAM1q3dtLx4u2BvK88xnGXs7yS\nqQtQ1S13R6nzNpgcJTOihqyQL38iOEquFcGhwdHjnyb7pHgrLKfHxC92tv1A\niaFqDEpHmeN2FQdcvs6/YAqsc0Dp4/afz7B58tiiV6AAl5jn/V/2I4QCUHEV\nisz2ZfWB357csMpZPMIjmwlKgDdPtYiAE0MpIpcbS4JBIn1FPQrZodaMrlf3\n7C8fjhVp/c0a3fajeHVvPhkvA1lzW8emWN/cKYGWe0gYh5GY+vpgStSlEzms\nUe32\r\n=kIZ8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaNOGDBhWf+03S1BI1l3q8U/DUhuit57NGQqc0hkC+9wIhAJakvNz8utCzqtbIpLorlzw5+P+3nfcT+K04nNHkiEr2"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.9.2_1568484238259_0.2569145496031231"},"_hasShrinkwrap":false},"3.10.0-test.1568491851318":{"name":"ts-toolbelt","version":"3.10.0-test.1568491851318","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"ef0589a3806e60c7394de969e043476da23e0427","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.10.0-test.1568491851318","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-fHJvZ5RQD9YBvyLhsf6Zg3UGZFrjJgir9umRvkiwqUoW6Ef7HJPIezHUszrLMVqrNzywWXOxuFaJXPhh+Sep6w==","shasum":"7b1d55b61e1718dc8c1ef623bf70fcc78d5bc10d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.10.0-test.1568491851318.tgz","fileCount":205,"unpackedSize":193145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfUlUCRA9TVsSAnZWagAAs4EP/3oe+aN4ixQ/yUWf76OJ\nvQgnnuIrJUvmakfRQ1O5h0zVLqw/tcp8VnqURlBsaiSrmoJkILCWcRvVho4W\nmmQKFV+YrSk/9sLKFhK82opUks3aFlkvauwf/7Awv36YzbUgZhl6c2uejNNu\nj8J7uJNzSGl5v33nMm2lLHVO+Kn2UW6uz2WLda69qfXtqgy7ggDPYfPXV5LY\n6K/N/WtY0qsEmRdgonCOUNpMHqkvJr2PtSAg/j8/m43kNQvVz47v/JicXRKd\n6jU0CUQjqsGKUPq7M1pGmcMnYXSWb4OfaR2L6jBKdLPRCbj/TTut8gBCcwnk\n4ReiZPkMKo5Jfp2HAKRR8elZZ9+WpyQO4/97X0uO2xSSwitfn3XLi0MRRLkk\nI58I3rMz/y1WYb2yQvSqm02sGWphHNpjCQhSfkImIYlTN1EkjJ1PYu3R83Aw\nB6M+a4m2cpcT0sEpdlur9HzgtTnz6dLARPsInUeUbfa00z4UL1RXcDWUXjeu\nEjfyn+8XYicXG/4PQcSZNESgt+2B/4d4wcrfEwUlGyM6AcEST5vbWMjsFs/y\nHHtyI0eHyMTneykDsvVYLEGhr42EXucd4YDvJFRXrFWsXSKurPXoTJ0RFT1+\n7KgTnr7UdDkYAdbyGCn7ZNxdZfbho82uRX0tNsCU12waCdpuVPeM5+qpZ3GB\nmkCd\r\n=tuzy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGXdYojVrnVaN+UMFLjq3hc3Bha2x/zw7ehCbJ/XiNUcAiEA1gd+D0IwNxs7UaaBj+/oR5+gkuAIeo8qB0k+hNhAdZA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.10.0-test.1568491851318_1568491859565_0.48583170091032146"},"_hasShrinkwrap":false},"3.10.0":{"name":"ts-toolbelt","version":"3.10.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"ef0589a3806e60c7394de969e043476da23e0427","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.10.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bBuhxvS1ZUww3EwBooemUTargLP1EBgIcO221iTI0EjukHyHurnZckEHrpWA+P80JPp/2lvl4lv5bZN9P6AWUg==","shasum":"d4fb875636d5c236c03f112820f1ee5bf76bc62d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.10.0.tgz","fileCount":206,"unpackedSize":193126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfUo1CRA9TVsSAnZWagAA4FUQAJtYdwcFW6Q/gNRd5tEc\nPCLEzjEsf49bUjQ727TD7QmXTfx/6fDLbKxR7dDnwrOdDdqcsM8Ecglx77m+\nUIetOV+9C8OWm87BTGfl65ZpBJXba93pHIk5Wy4qp5s7OCmwFs75O6rW0ghx\nbqqNK/dsEFhRyPKgNr3vOfCm7sgAutacsaZPk3ks4ubcNKNkDvdopvcdEog8\nzI+VzTULRHVYPciPQvsktZFz1o8F7TKQtDz2toDc9PQPAsnWMkB/yiw6BpP+\n3cG21FBZ7pg0raphixDeD9CI6gPMd0Cl3sjBy3BVwL7uwvaussI7fC6O3vm5\noFm3V55WSUppO2EDOIBE6UAYFbtFZJWygR0Gjrgpyn8dom22v0Jv4MT88+pq\nvYXCDqKGoHEx6rwSEIKJW4PyoLrJYePA8LhrxozZsXOVzBCm14NH5H42VELc\n1/qDkK/Nd936rYUGZTxv4YP8s374IXJ+IHOG77/MNMK0+uOjPGCEaq++6NUO\njqdnKNga7wdR7qPDiLM2EmmecFha1q7P9jrDLD4zFPSNnMOt0gIVCWGO8Ppi\nxDyhWzfOGocFBoq8IoJ/fzlUFykAqgF/PWdMOVUL4SH8Ak5EYu50Fcr156Zs\nAJJ5Hcfealcoc/MWWIYeI7Nw8k2wB287Fq1W7D3wF6qvgfS3OTUzqXVJwRLW\n3OY5\r\n=CqOL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCaneKeSlXaQvbBrru82B/PjfrbpCFPMD0CVfgWaBa6AIhAJRiroA2mI+3eS1M8aFDVlZ+9XmCcNoDXAwHqyRuexCa"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.10.0_1568492084928_0.7279713725967376"},"_hasShrinkwrap":false},"3.11.0-test.1568654864716":{"name":"ts-toolbelt","version":"3.11.0-test.1568654864716","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"4a1cb00d55ef72c2f90e1bd50b206c32911a20a8","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.11.0-test.1568654864716","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0sc4OKWqt1vm8cCFC8s5Rp4pA8dvGPwYgrP4cdWWkQqqIkGqnxScr0/IL0cPA7jQreFLtI32/bDmCBshR9E3YA==","shasum":"3129fe82e498ea2de2f5309227a5dc115b5582c8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.11.0-test.1568654864716.tgz","fileCount":208,"unpackedSize":197951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdf8YZCRA9TVsSAnZWagAAKtkQAJEpSHJB6DkkFQjyMNKN\nmzVu028xZvC1TnJO1Kso+AX23AWvcUW40A5Jiqnozysdh8hH4jXyZ/fdP+pg\nIwBOwsRwrRshenSflX5cXwzYB/28/gN5X/mt3gmAgOwgSfStbzN6aeaTbS0h\nDcmGQSOObJu9HwmEvCHZ7y+ebGnBAiGSAGLQpshUIgCRcIIvBopGANaAOKKk\n/fc1+jBzL8ArT13MNHNNEHFiNvkJVN5yhEbFzuIaYcAf7euboZa1CsfyLJGr\n7RpxQb3RzMYOPkktv6EhKJHxvf0Ozrrz9eNqIjhUtFQ30QzEBllt8IixJhBt\nOfvamj/3txWLf/Nk4VtsnkhsaROcs48xuMbemgitMVjjLBr9KHYfzXhnkoQU\n87tcjekrCywaIfMTN4AmqcB3/aEZvhZ10JLPLDxCzNpS4UKw5sQq3hAFZ6Hb\nS691DyDIxJi6G8Tn+5lgVuvp3ST7L6jCnRwuCn8uP2yj8p4aQCTI7y/8O3PK\nzthlRgMapgRm2kYmufgUGhN0LDxfWIzm8aywjtRHfqtYMmRZzgmFaHkYriVv\n8i/s3l6NN6IrevmLKTXmXYdfxEkAVtdJEDqCI150rGMT9Y3M/8s60Gdj6VTk\nSw/aHQ25+VpV0m+5Zlfb7pqG0Kg6LJ2A1yXmuTm+TZ1vB96ZlFKl5NyfBaJK\nnS+u\r\n=XXHu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRgVk55EiLfXBLcfG2AyIakR9JXysklyn2ehDIcgRsOwIhAKzpEcvcVdcFLcQX0rQdsmYQ6Bi3lKOz7X+czFByIqMg"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.11.0-test.1568654864716_1568654872985_0.7123987814106361"},"_hasShrinkwrap":false},"3.11.0":{"name":"ts-toolbelt","version":"3.11.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"4a1cb00d55ef72c2f90e1bd50b206c32911a20a8","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.11.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-OJ+baLKTSsXgao7weQdjbGIAEjriPWKy63zZQhRNvtslYA4igN8gHn/6B71NQlSzB0Lt0/tolJfaL6Dc38cESw==","shasum":"5e8eb060a45cfad95eb0f6f3538cee136209f70e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.11.0.tgz","fileCount":209,"unpackedSize":197932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdf8cKCRA9TVsSAnZWagAAC4AP/387mFef57+8p4T36e6u\n6o3z8j6u0kZIeHuaJ8hIQ8PwLmEp6Zj3aBOZsi642vywwYazZukfp8PKv/gC\nJFNYXdbCu+1WgwKmdJyRu3YkW36DOvQhC1BM23zVpeqUTgHMvZ1CrNS6Ig/A\nZW7OJObwBzh0Co7Tqd+kVHzxEenSBuEmhvx46RVbcyKuvGQdwKLbFvBE04ID\nRiC5iVbvDcE68xhs4ns2098Cg0GOy1iSu/YC6WKuZP63rIwf4Cm+KJqWQ4sI\nh/acgVch9b6easryjP+aimjReoabfJUJ2sVBVeZ14dfeLsy2l2sACFXOOehh\n0c2tVfusSol+upMx6obOoRAl3b8SOKus3eWK/WY9t78qBlgJz/NqKpqmEDkU\nRdxwCfId8K+7kL2ziXkSKzPvbxUD4ZI6g8iyGtCzq4MsRExydWrW2dDqApot\n4R5Vf+CvXJnPYEz+EcsMjqInfFgGkCHqJGiruwnsoPYBc22y5VG1zt47fhq6\n05WHPheZXdGb184rVGDWShbiHXISMCdS9wm2zXQj2/Y96Fnx/lOkHHMPjKHy\nUUqEeOsMXlVcwQrtGQTd/gpCvhfJQOtAM7+m3qi6UNGOhoLDecue5a2oqft6\n6C2UXSgQMwtRtO5glZ0gvRX2aSQL6noFpWjaFNg48JuoxSPq6lsnailJUAJt\nKKve\r\n=v6pB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0+Sh/PpuoHjRbritbLlP/ScCG3rQ+hz+2NVOM5nIWEgIhAOovz2dOVCt0thB7zJ9IHPfyFclI8YBEaeBcnwZLp07Y"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.11.0_1568655113797_0.9758095581495447"},"_hasShrinkwrap":false},"3.12.0-test.1568713151449":{"name":"ts-toolbelt","version":"3.12.0-test.1568713151449","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"904a37cba85cff6544afeac5b99c0aa642b353cc","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.12.0-test.1568713151449","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+3r0EKuCDkhQhFyHt35Vlk/gIibVBuk8cW2ieVk8za1NXtpFanX/NfimnnEVkMpUWcGoXy3vnzpzym3dpr563w==","shasum":"4fcc516f42d4b22a7287f1309234426e7f6dbaa3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.12.0-test.1568713151449.tgz","fileCount":209,"unpackedSize":196319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgKnHCRA9TVsSAnZWagAAKtQP/A/HyqbrcFxphWjqDDN7\n8StQZooWHs/egXjkZpnLlcee4MPym1pMqdXfmU1vy1ayZZ9V2MnD0WcZfQWI\nWDG+H4ZJ6kDVWVlrCbECNKj9hniIlSwn4fe44u8vJ+/qkxwszt5ganQeism/\ns1sObpo/VQmDEUw+N+iFYmAH012OPypRr9VcpZ32dZOpTgLG2f7e10cirol/\ndBzxolP451NsLXfPY0CM+cRDY9BcrexO1ENQtvX0TktYk9zfIrN5Iu4g4r56\ndPeYil+Po7B3jD4bU7PFFGQiIcZLD9po8OEbExxpd2DfxMNSUdd3qyK2SdPO\n9b8C4YbUz7xW6Va7KOShZGYkrJs3DzDCKABk9vmDZVpo70AAu1UDSTiU/80O\nI9fkxMsyxhfr20nOf0w1/6iA5YDpS9rY3auQ3zQCaZ73lP9Bygv31VJVbs2K\nixmVHBmco7QYrq6/PZ3F/sHxUOxvP3a2mI77iZ8NdaPyDUMvUy23rIZpeot+\nM6xVdjK3Gni2rt2ig0LyG7//BctkBrXRXlDxI0or3FujA4bH2UWPVYx57L2X\ncIpfe6OXDWSJQd9zVlLSdoW3gombjp6JSRhwsCJmoJxM0YKhIu6javi4iwAi\nSddfHWsM87ZGVinyl9c+3/SCR8tiNKlUF6JlFD4j/S2Q8ucV7XhbYdE0oBS+\najVx\r\n=g4f/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCX9RR6bCQrjw+aq4T7QJybCQnovI7Ncp2I9xj5B6Fx/AIgH0b8ssTEjRKg3uk8D02HmvcfSBOT/Rx8pkFv4TBzspo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.12.0-test.1568713151449_1568713159225_0.6198186517876956"},"_hasShrinkwrap":false},"3.12.0":{"name":"ts-toolbelt","version":"3.12.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"904a37cba85cff6544afeac5b99c0aa642b353cc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.12.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-aGjQpudHKhQmKXTwYYa0Mt2zFtaT+FY9IAzdKO/ldTnOCWjJcwgwpgv+UjZBew2TMrs64h4l5qQZatjvOQyfmw==","shasum":"557d0a2d354c1a59e430382fe0bdae4c454131dd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.12.0.tgz","fileCount":210,"unpackedSize":196300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgKq0CRA9TVsSAnZWagAAxpIP/RToucSnOAtemiNNQ2YE\nP4jJEKMt9NoJzJ0MMzGjPIQQ5Eup1zeoT/NI4Bk8CjeT/ElpZNJcy/cYNjaR\nkBo3VQ1hFcMfKrRJPOKxuDaRKZ0B7s0yt/wkXW2D+rUGXl7XDVXQk/9ie9Pi\nUWCA0SWid3V34z1eyKFvvF3FXjpRgj8UoHEtxtcaNi46vpvzLRvNTOwPZPAc\nX5Oh03r2QWujdh3FpU1P0xSVgtVeeTWo5H1wGft9TKIBH8uo+qOYhsiINTxW\n1iw1H3jbj+yG+K/TEZfJqW8btDkzBtiLY+PkXC7K76J9RsmYk4rBjGrJHEM9\nmLNTrtRs4q/caxKWnAbRZTQiVzQA9D79aT7gifyqzvHgCbopJVB+aUsOOm2+\nMfuNxlSFooIaR4fcV2VhSQ0Gg/TRoWI/h3jT+J/4A9VBAcwt+7WAkv+WACbR\nJDhUMT38tXJ7+9vLrR+71PMYZ0wYY+1X+/4vyKDnbh2M9saEe2YVCzIze80e\n3IGXzfr3/IWHzGjCbtZ6hZfY5X6qj03Pi07Qpy8ffXv1XW9U/hXHz+w/5f9F\nbv+z+jFMUxKfUAZXU1al/k61660LOzpkMXEZuFxEJQrHksvGGKNTz3AS73C/\nZzt9w/mGIvs+/jf79k/0F3p5Wsc3P/Wx04ra4XhJMJs6F1sRHr4zMtblYkCe\npCn/\r\n=bUVk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIeFZY2t/ldkMcfiZJ9uULG/UdpnOA7rtFXmK001/YpwIhALIM2kKKIZeGyHnDYgxa9L3KlDzdWQsTD+DyDME28PlO"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.12.0_1568713395270_0.7490446705910905"},"_hasShrinkwrap":false},"3.13.0-test.1568746194544":{"name":"ts-toolbelt","version":"3.13.0-test.1568746194544","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"ea2db1ceb317e1384dea5527bdd82f31db69d2e0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.13.0-test.1568746194544","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-glfC9yV1d1Zjloq8rMjS4C4jNSS58AVsuw/ajf1FkDdVATJ8k1c2Ra0//+KoeI0BQWJAXZhZyjvtS356L5pDuA==","shasum":"0736f73977863f2614375f7ec6e24d0f3e63ed01","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.13.0-test.1568746194544.tgz","fileCount":214,"unpackedSize":201442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgSrbCRA9TVsSAnZWagAACw0P/RfnnwaNPscMimHwCS00\nBJrIm3zJFFAEwvOM2fbY334lqVt9hwl0w3Pu4luI0j4BFA0oPdNO/vsUmCSB\njJnbkCpLdmFyEI8h1yeoCYjVRAk773kz/PMWc50Dvmig3p3a63ZZda51bmqO\nCW/7QIMn318RoDl5aeNjwNDsRQIgbdRjigjvWpB+8xQjHTLOv99kMklenlq+\ncvpCo+Je6Y2xvYwVG/ROIym6be2q0Lw0TzrTWBFvRuQeVjueCfaG7DPl2uAB\nJAonFatF+ASAwLofEmn6daylrDZTG0ZswoEDA197TguRvkcYfeAY72WNx5xA\nEQGnMlQbgTiDJ3TFFS4qsDERrTEhRuaxjiL5rnrWh1eAWvdaHSI9R/rBCBFA\n7svhag9EMOdeblcm34jxlO7TSJp7oZ0jGYLE29o72JiPOrmU4b/08ws2xw6x\nlIxVEUwN0iJLJ6zLT8pIohF1uGWRqWbdui9hf8KvkeUbIXbEemYfYUv3SEhY\nwRRvlb6koqUgk6c6rORXoI9xscfE2Wc9jZqYAA0j8nnTN9XeXfCTorJPgu0G\nhWYyDRhOpGSgx9q1EhP4d7ON6IeVh5j/EKVSZlqkFGC0nxlUHcbfE7w0PQYq\nrxQIk+NpYuL8hXnxR5kpOopuvWDMU5h6mkKKSy2w5y/aVRwmVyJS1bcfT0Tx\nZYin\r\n=EmZQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcZ0Hlv38QWZXy1jwAFvBk/WBHerXYiLgZQff7C7gvEAiAa6jKHPrF5Ro6SZLPdCyFEHBeotI8iu5ZE4QymYMQazA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.13.0-test.1568746194544_1568746203074_0.8065318644125332"},"_hasShrinkwrap":false},"3.13.0":{"name":"ts-toolbelt","version":"3.13.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"ea2db1ceb317e1384dea5527bdd82f31db69d2e0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.13.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-NDlM6hLB51eOQkL/a69VLGTchPIiob5UCUM/BBTY1CefJ9fpjehfCiizbOaJ4eDrAcPAdDS60YyziDXvWWvxqQ==","shasum":"75b0772725f69be0fde9e84a95feebbde9362b61","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.13.0.tgz","fileCount":215,"unpackedSize":201423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgSw6CRA9TVsSAnZWagAAJk8P/jS/Za+r5UHerA1mrYLv\njHh+mjgSdTzFy+7WPsr0eDb1XhngbLFLutkhbP1lLBbNz7uRNOWWM6vUJ92p\nJrSSbGNzz/oKcQ3crTHQ1u/Qg0rUpN4URYbZ/leKl5jJno6a23ZmNFHJjS48\nj9qzLGeXinH5+iIVHPD3+F2ru03xKjNWPl4SWurHj07jd5srIRq3I5hfrvtX\nunmtFkGtrKKsGJxFqrJtH/KaRAaWG7obwPZFWltsCAwMVmFsXV1YigGcWEEO\nvNCJrhtHMMvhRDGhjWY6rblggUuvaqX7LcD2E35iBOvo4sSx/AZLP6ri/unB\n5firo6k+G4kzzVoBnrliBywq1mCGdUyguYoxrFNFpMi4D+AS6GDsEWHkMRtN\nTm5Na6aOiAgDFmfDIRc8inoleYmWba+gMzfPc6QeNsbKNJab6G9prTVXVGwk\nj2e3+cWnKt+fNkLRdvPoWGOY9NZP/SxFItxszLspTzk8XLHxueqhKa4uY1yg\nDLmhc+xs/PeHEDsWK+MOF0L4f6rIOeCATHWXOa+T5BLGQUb/f8LglRWhKKAq\nmsngY0wtrpARgLqHihZWHeXhu74kNlugMfpfKc7wzpe20V+Ma92Mgyf5n1ZD\n2EPtS2JqZVCvYhIVq4ompKi1mw6X711fyEBt/Pl8gWUwpNTEmYdth1At9Lp1\n+Zts\r\n=Ibgn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqyTNyS848nZ0T5PEhf9VIfe+QUlzinnBJUUIVtHRdlgIhAPvqc8hao7/hE02VA6ZuCqgh9pv30D88/eAbL/rxrkVc"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.13.0_1568746553577_0.9613540099684272"},"_hasShrinkwrap":false},"3.14.0-test.1568753704363":{"name":"ts-toolbelt","version":"3.14.0-test.1568753704363","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"3daf13eb69b4aa74925f786ef37b3bde29da95f3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.14.0-test.1568753704363","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Ej4LuWlEhgxbzYBvBbsJtI0lPMpXljwvcmMQseCBJqhcPpPiDVvL+Zh/7lIVekgWhRAVIlbqrKj/F+ApltGpiQ==","shasum":"10da9bbca0f45db00baf316aa3fd4b0b6b92d21d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.14.0-test.1568753704363.tgz","fileCount":215,"unpackedSize":203870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgUgyCRA9TVsSAnZWagAAinEP/RpPXHf4GvI3R5p+l4KZ\nEUSjpDCV3PgkMfgX/m3rV/AsK1ZAhIJovWjeHWDVfM/3N3sZkqHeA5jr2xv9\nd0A3X+NgIcJ0oZ/5QNbtoSEE763pM6iDk8QYk22Q2Im842nygLrCrHBq+vmf\n8WG8hp38XEvBgm+xh0kC7O/2tP4IQ4CCZuLNutfT6ATM9ULxPSrowKwJYyW+\n9l7zdNUjg5jg2gZE7yv9FT8m86gaiA4OFWYyqDvl9aJRD1y3f4FqXxOlj3lN\nohaCy4vE8lwR40g3qGO3tGaxc/cPu1bsw3KTa1KVeluGPKS0/BgJ9NShPcNm\nRjzxQgKqaY/BYRX+vQzzTsKM7beGtfMZ37VDUkGz65HFwERePhCijp9aAnge\nKPGtY5SCdxLLxUv+M+wQx+CsosduNnw71bBgXEof7EGc1ag/yn5Ha6aZ7EhL\nL2MMD6pO8ycJvDh3B2V4/CdD6Y/kyWQHRqZK4GHndeFMlQ/LMWDSWh5OXSwA\nDeASpFnEGR9zfl6HqW1JohAjyvwI0EPMnxCfsObAvEBdroDUToC6HSSmFlJS\nmbFlco783CDTkoYwx3pnUB4XxrnCzlODl/4/yGz7lnZAettv0DsDugIgD9lT\nk7dk+msB4Lk3l76/TvFeVRgsYrqGqzlLBLGtSx9aY1B+QhuN8209M1DreFAA\nbQcH\r\n=Sjdm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClvFyyqYN4UK+j3qzLMkeVKVIVWTEQsUhz6sNvvejPCgIgJCr9EtUQl9fdLqtW9Lsuyv64LkN9laA5v7Qx5hUpSek="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.14.0-test.1568753704363_1568753713284_0.896603118730058"},"_hasShrinkwrap":false},"3.14.0":{"name":"ts-toolbelt","version":"3.14.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"3daf13eb69b4aa74925f786ef37b3bde29da95f3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@3.14.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-DYjD8tL7M1kBogRd9UKg3bUP5yh69WWcMSaA3By8ATiJU9fgYudSYIe8tWD5cpPkrGCdGGnKXQHG+5IrjJ5uhQ==","shasum":"f4c4984cf4e988915a0175fd6a8ded00bd1d23b0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.14.0.tgz","fileCount":216,"unpackedSize":203851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgUkkCRA9TVsSAnZWagAAcNwQAJ8oevLaKyv68oLzpFd8\nuUOQjgXDjOPmLMVrbU22Cuy5sgJX6hFeLUA+hd75atXVzOXzeNr8XT8f46ZP\nm7Kue3XQfrbOeyF18aNgS3BUXVuozyQPZEeazARUQ3nYk0UQXOiYsHTgePIj\nAkasgnfaWYEwedMd88msgU+E6md+sz2NUXKQem6SuP4/9q3YXHSZEABfQnR3\nqYJdyjl16b+rn/b7/OB5RAjytd4Nu1P0TnKVNcpAbbdVRxAKp129y/04pbIm\nF1afYxxAmj4n6z31oE9/BqsYSfAQHR/5w1T8AEa3DydtIKMJNlTKFruCxm2D\nIGGnMDdFgyIE2wkLQaQrGzxIPjHrtQOj/YKIFbHZBylNxKXi3+n7UYaToL2y\ngv0wr0PAZOkZpWYu9FKDiAAOSBWCmgMB3gF0qQ6qDQN+RilSmIJBQ0Uvufnl\nVzkfhZVJcPmFBTyNtlHA1kqb+013Bd6WGgU1Fi4WcNidHufZ6r/jGfIwON0+\nUo4uLB0Gu1rSgb1fGOT427hLwPI6VivKv7g/JO4Eyq86tSyXa5sQ+iaaEHYo\ne40mD5olp4aVuMJai4WW9NPOzRksmxq5l3Y1UVya21of6cC/atzyXHHqeaGr\nsNRJWbMN0y+SllLSz917xFOkFLFW9BQjK2thHK7uARmwP5HFq8Fjvf35WV7n\nYjpX\r\n=r6gj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICpDRbbd150Oeuv5H+xKuuTB1n47vkhi3fst2WXIDhCzAiBcxmDRxm+q4hamxXZtLsH35pfJzs9BRRC4CNG+IHVkIA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_3.14.0_1568753955280_0.47623401407304833"},"_hasShrinkwrap":false},"4.0.0-test.1568904616581":{"name":"ts-toolbelt","version":"4.0.0-test.1568904616581","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"gitHead":"95ed26efe3c327c05165d9641f506b61fefd3e96","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**(ny)    | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img\n  src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant\n[changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it\nhappened that TS had breaking changes on minor versions). Otherwise, the release\nversions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.0-test.1568904616581","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GMwsohoqj9khISawKSQtsgTbrhGc9r1lQqPxmimTGb9Y0jE35/ndFSw9qlvVmQTYbih0+pAWH1KPbvDpqM4WZw==","shasum":"c4904304883e8a17800a6622369e3f3e51d11dab","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.0-test.1568904616581.tgz","fileCount":216,"unpackedSize":206773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg5WyCRA9TVsSAnZWagAAbr0P/3qURnRYjua8vqxZFmzZ\nCTevuZqWOF6tjmbJlNEcg1aF+ayWqbto9rL7imAEa5fCth8jSJbxwexGqLTT\noFYuMwx56bZcQYyYDIMO1POdwNYeZVHQVlAClFA/BrB83adpZDBFMWG8vRVK\npEZRf+fWoJ+kIjR6UBqFh6m67K3R3k6YQmVUcDjBho8EEWMISLhLDPKvnus/\nHCMyMAXzWyRk0G2E0zALF2LdLy4DZyJXtzR/LTElIY3H56gRtTTz7vjNF3xN\nXREz9DrJC9OtHAS4jPooU5bF3KKlCQk+d4DnzBasdFhrgtIR2fcczASjsb8S\nMB3G3pC1+eeGjdcysTUn9qwdStFSvfTd6zIEc2aC3IG57xWB16hmDDKUupmK\nohh6Hyr5NGFGPgihLf8T7skfp/438Ue4U6W3BMkf0WCjjaohtSfRYIAMSqUc\nWxGL2xkHGI2oNX0ow1sZBYt05Iyn4gPr189FndO/6UPbWwKl4Q2I6Rnp+aEN\nyeNmEF8DosYGUKyQ2wdQqMVoj5/azLL2YMznZbS/6ofuwaQ6mQwMP1fVC+XD\nGk9qOskEKbjucQrRhG0qH+yb50ReWicamISBrHTdQY56YVU8C9Ojf/62Pi0T\nutNg4dgRGjmT54GvZQJvgdUslg1R6iNBWkAdB2dpjW8Jn37i1CCjYReXLVTB\n724Z\r\n=MVS4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAlgp4A9sOAL0dicyZP/+Jw5we8++RmmuYkk49HtwjXgAiBKtwXZ4mUaYYW47xHydf7P3Gptx6KL22f2ZAAePqi0mg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.0-test.1568904616581_1568904625712_0.9693468524256985"},"_hasShrinkwrap":false},"4.0.1-test.1568907418293":{"name":"ts-toolbelt","version":"4.0.1-test.1568907418293","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5a32c3a026a77c034967fa03c2ca2838d25ffddd","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.1-test.1568907418293","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-lipCIKohpiJm0iS0bHzMv+OWzrj4WIiN2o3Zz3SUTnFdnivN+G++1vhzHSaB8E24vVbYmWoK5EcEQQOCV1RAVQ==","shasum":"3ace39498195f333320160d371e9ff0cd4f6b21a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.1-test.1568907418293.tgz","fileCount":216,"unpackedSize":207128,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg6CjCRA9TVsSAnZWagAAlKoQAIQOlBN1Z8yYLDESERZJ\nZ8+5hPWvnmDGt1QV3MPe/TC0+0q9Bhy3czXglqAcWBnhIf9hB7bSs5nTnBNY\nzugDy7SdrNTR95WgUAWINicORChqW+MlwCbXZKtv85E4g67i8THRl4xC1MfD\nnfPWlzJr86X+MOpqe8ETcSQwnO0NuYMWsvdZdQzRubGRuwbr98MyXo81SL9o\n5hxMEAVNY6KjkO0JOMFia4gc0Dw2D19cBtjuus1d3Q5LjWWQVCNezkPqGWCX\na6E7+VLPoILxUnypOePeg92QMpcrDwxm0xgE/K7ssRb3jl+X33L71eP3z996\n7I3xaJhq4PcgtITCpVNvUe98LEMCwFkKUD8TRHSfghkWFclX/HogOaI+Pk24\nFNW120BeoS8w7OTjjXJCrbHHM4vcOXx4C45PIL/Vb6yyyJHf3p4yv5kSPCPL\n0j/6cQKZOuXuUuYBlxuxxvgVsI8mMhcV1h7pw8kCYjLM7aE+yqm2Gwth52Zt\nn6sL/JSEP7OsygJhegBo4QbDNGHBYHdGUP7Iq84l2094NH9dQZ+d4VBXRFPA\nDbmFs9xJeyTMrVAYi4dCI5qmuS5foczeBMb2fZg7WSn8yCPIZA5lk3pQB10g\nK5di08pxcxPqaNrNxyXUcYziPLRWAeS9oFcNPU0d7v66uCjkxgq27gm+IZ4N\nY1Jg\r\n=sUbA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfRyfUFbbE7vetz6p/JesxN8bpC0oa+oEtjAiXFt2ETQIhAKRpUxjIK2Upmkt9o3I2QBMnGAJAkSioV4pG0xc1mXd8"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.1-test.1568907418293_1568907426882_0.6870104278626239"},"_hasShrinkwrap":false},"4.0.1":{"name":"ts-toolbelt","version":"4.0.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5a32c3a026a77c034967fa03c2ca2838d25ffddd","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-KvamcmOaKKLKCREdVLBlzEBfnsZWz44Tpxbwed10mDB/ZBZ5rt3BcouefUw0DZlkwmgIpqHNia+xA4kMnFadNw==","shasum":"6cc6637f5ddc46fc6f57b96b050a3c2de10a4fb2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.1.tgz","fileCount":217,"unpackedSize":207109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg6GQCRA9TVsSAnZWagAAJ6oP/jPVIzrurJRHk8mmCAOF\nm10/cb5ILz5bOFzRyuP/2fqp6ydY9xcjKsvTat8DVRWoVx1CXk6esPJuw/dV\nyPeBcZfMPINulC/wVlasbhuOqW0wRbQDiLvbE089tq/6vTGq6uycX3UBtOka\nzCwbQKXqxQWpq0+Me9qQEEYEmmasJB2h8mwAyek3v+c/AQRodklWpshr+jdK\n9+DIoIsFyaI2jEecqWMjAYNZfaYWrCE5iEQzqO557l7cLZ2RcdkRY5DTy9Yd\nB9Y4OQdCOqxfx0VAptqd1dHbxsVI0k82pnlWA448R5UdwGdQ35ThUVheM9i7\n9tux9eXLc3FqdUqoiY22mQNPHaSaERJ1Utp7sKn0VMtEK2kJLDpDXvmgV2F7\nEyDRd+8abpNgHEi5tXEJOEoU14KOlFy60SR9VzAwkZBtLhauLFdL6HyVgJ+M\ntpWmTdADRihFMpKJ+fiy+k2qIghfkJcypJ4aGuPnd3xjwkxaoLIqHZ7z8cg1\narwA0u3FYEED3P7i52MjVvduDnYQ2ebH/kvfwut+qYsvIVMTWWP2F5un4mug\naIvB/1vVBg4INEBMq+t0aVjuNqEcjsZ4xqVxU1QiXN/40kZh3xSFuN1lT3yJ\nu7RPIdciTOJyDtcASz6zp4/THrnpFoUbPW9sTOsdFPIIlEMZor0ii4UZv9dl\nRLpS\r\n=VOBF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNpTZtHssVTxbUzPYVuh1Oj5s8Hpn4p8wPS8ZqSStwLAiEAot5NhgUL5snObG3VRWpw3XFmVeOjdIwjRwdkClZGet8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.1_1568907664338_0.1558482569481776"},"_hasShrinkwrap":false},"4.0.2-test.1568913469521":{"name":"ts-toolbelt","version":"4.0.2-test.1568913469521","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5d11f598e5061266cddf34f9feacf31f06e13832","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.2-test.1568913469521","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Hc/sq7n2+ULMAH7ftq4sb1Kv99C4t9MvZoCu+QFG9M5Ps7+Bs66HsgO5wvPp/KP0wCgSPtJrRpoWxvt5/wnFMg==","shasum":"fd0c0b9df4aba1d42bb66edd03043ea5465112da","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.2-test.1568913469521.tgz","fileCount":216,"unpackedSize":207415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg7hGCRA9TVsSAnZWagAATM0P/jirWh+14OOD59vTwIzQ\n2ElzdxwEyXnOg7issUU9st8EuOyKb2tMOa9i0uSrboU01b3sQCLsARenu4/b\nIOxDY5C22ApdbDaKN9RV7LxoRzYncEoNW9eHakeSSpH3ZRpol8HST21chkzF\nfhH4o9Y3p9dUNzpLv7OJJcRPhi16KcxG6GM28MXK5HYP3qKhubI+zZoSSyYO\nNJlX0IoirZoHuMgqC3Y1HVpnNoCrah/BNB1/kxKGJilWzw8MZIJT3LQdkO1+\nlgUBUa7urWeNg11z9dmhhbTdJnPd27pfiINZivUYTYbDEXYwTnZAWE9aLWSJ\nAbHKvAZx9tH5/ChiRGmWi1iJYRxVpBXcH4abgep8jkGvqOKgvXtrgi7RrEe7\naWMQdFSVn6tBwcGvtsHCOgTr7lV4w5oPhMdvs15aGJ9eYAwFj+LLFhk5fh+0\nl5VLZM9fwYQKf4lJkMuED/AwERRafZsq0nvranPxrNP23wc72O9+lZ+eBhYg\ndwys0iHbTcbiskHYD1eh0M9t9hnC500Uq4745Tlmma15GlEIgyhK+w3GcESb\neU1N9kD4S2ZBfQpwWZymHdy3n6dZPht1zTO54cdK8sYdBr6sDOM6vCfXTStn\nUdQ3Zuqc+FGq6Y3mLk9Wx/YElXoUqvv0gIM8shA/eCaQUrvJ7WozoucN0rhE\nzpBu\r\n=uD/u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO3Zcw/MpuLtrCxRTtZfp1PZQJ17SdsQXMe6oEhIqFUwIgO1ty57yq89VwD+zliQCOQCtUEgvpccKi31LQQOIkofk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.2-test.1568913469521_1568913477660_0.13523218215741362"},"_hasShrinkwrap":false},"4.0.2":{"name":"ts-toolbelt","version":"4.0.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5d11f598e5061266cddf34f9feacf31f06e13832","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SxbHWKE+hglSyKbvNfi6GSTn5FbMA/k0EwRdhdezBSUw8JCgguJxDYE/mBNlJ3jPDomfnJamaeGeWMBCOcj5vQ==","shasum":"94abeb39c276c84c9d50a72d7e698f1ccb8abd13","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.2.tgz","fileCount":217,"unpackedSize":207396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg7k2CRA9TVsSAnZWagAA750P+QHOwvMOEqvQnUjKz49m\nfuDMKREr63eHcYBdZIetonJLUFlQ1sfpSxv1jqxiWAJdBDXZzivHLtELtOYO\niPWWvThstCmRhrN1Y0YZidqbdAjfZgaCUcDwdGjCehPt0AMTMADSz8U8QkYL\nic5LN2vdHYx10w+4MxJYE4iM/aZVYXWC8RHMacdK1zwNO02g0jyqFkPSk6ir\nx7BMQ1xMhO7zvSvzAh5KJjELsTA8nknYR9F/B4sB4+CMk0lm8yVTErGsO73P\nP5Edyhf0hGNEDO3OJCZG4oLYzQZh2iDf6xwPWp0b9mUROx1qRAQqwUJanScf\n+qnYFsUJL1RhZHqzrxYl4fHQsCd/6OlJAQyDIR0AxE5pn5dbX85D/adxRF+3\nPlsmWfODdqW1Ra1qyZGXVnQNtZFokmcBmsR6TQYqXPmHzD5XVR+aAYz2T+PN\n/ajdR3qqj6nwfth2QGrw/oQb0eGVtXTy37H7IavFVKT1/ISI5Ni3TPyw0C/y\nEiemkGgFd/a3pE0UezfcOyj1lm6y97SikOAe5FKHytnA/eLHqZRYqrD9hyGT\neJuuTMQotsnz+RQbBed4Q9zrgtcREn4LEorxDbQvZOOeocsyD5ik4Z4Gn6qd\nYNWZXkYDZfQG3DEmgzzJSELznj7vJuC0dUFjmIT3Q2X2xH6hfK0fCF71Hnmw\nIyXa\r\n=ROga\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChvrEGp8ohdbYyqxElrhDogPgNyXixHor8F3/ozZBxfAIhAJ964ZxwBOlynwFGvK3ZEbsjqblxstsFj4Y7zr4y2J+1"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.2_1568913717278_0.17297162702328794"},"_hasShrinkwrap":false},"4.0.3-test.1568914076863":{"name":"ts-toolbelt","version":"4.0.3-test.1568914076863","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4d77a0758a90f1c35b20063a5ac5d6f124e02657","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.3-test.1568914076863","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-iTgjMOxvIOpa3/9/9CP9EvIrLyuamLQt6F8dQMdY00kFD0S5m9PXIvKEVw0gwITECv39pNBTYPIPw1wZReurUA==","shasum":"1eca47dd64e250ff10e3444f62021fd8c5737a13","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.3-test.1568914076863.tgz","fileCount":216,"unpackedSize":207604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg7qlCRA9TVsSAnZWagAA2UUP/0CXc6vZRADT4B+85Wrg\naILaR/kyNzZS00z1TIey+8yzkPdg4JBgddGtxtEC1OMWGQgv/ISSnX/EnrIM\nrsbIeQgnKiQ5f4/rCI8eAPYYNAdtn7Dy3SkeKsOhKaxVxozDo+DKCNSKdcD/\nILHBhKtJ96hTyGTtHTP3B9aP2vzBCrgRiycVFC81ANieZGwUhawK2KtgljPI\nVID95ZCvqrL/NNprVqGUJA1kk9uqAjpchHV6OnsaMCkMBt/MWLDHw9wbISXb\n/Y2NrRcu6Z1YGB+P7xgFl6d4ngSrZ6US5GtvQoQeLm+cyrHRhqva/EU4faXz\nmItSkbkYHtYM9AkzXEwOg5lQpcZbAH0RMYetkcFs282pumIdgpP6Ia4SwBu/\nt3ZdeIeOARRCZ5nWuSBi1jrsJNmDbHrnthiICDljKJ6elSKfhUgx3uEKAU8a\nS/jKzp46XszJrh8r8QozauXebDscXemugk+lm6ydba2xgFB+H6Xo2P+Bywf/\npkFR9tUxWTVdZIUBAfIPko+xVcNaL1aaurQgZ7q5s/YANPeGIHUJcoYNUGuA\n6NZa9KRWYozecje2dUGBn6tkbGTyhmMkz9eSYNbdaB9hTQunJiG5nnErOOwA\nBc/dfz8Y6Ux2cIgL+2VkqiLcEtwDbwfedx9x3GQUDNujcXApDe1EFQl1fH3/\nYLuj\r\n=i+r5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzMMIjcn9dVlEoE0aBEi2JGox34oVy06NVNJAfmiSK7gIgfoFWABLrVPemTzOBVMGXV5/2em2QgE5F5Hnzyswu858="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.3-test.1568914076863_1568914085179_0.437254040315594"},"_hasShrinkwrap":false},"4.0.3":{"name":"ts-toolbelt","version":"4.0.3","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4d77a0758a90f1c35b20063a5ac5d6f124e02657","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/4lcnsgxA/V7P5+Z/ME9ChcFkmOh1O6XwHXsUSG84jljiTICp30EXI1nY9lEacAlxeRNLFoHRhyrdtFFfLKvWA==","shasum":"cfb39b0754c6314825e901edae294465ec1b8ecd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.3.tgz","fileCount":217,"unpackedSize":207585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg7uWCRA9TVsSAnZWagAA6UoP/Akkxc65+xKwWjKGJmHM\nYCM/yEdTYm/Zwovrmqj7odqBVHL5R3mAAPV4aqHmJTRpN4Amj1+R8SqU/+p/\nRxn//SKOrq0dHod1YNOEr/Rfy9Qpfu+jl2MzwR/hCfmLM/fEcH0mw6QPfVlw\nD2XjvtCQUgscWofjWkzgg8jsXikgw1s1Lcarogirzhvr38iNFTUTfrwwBa6O\nWFkg44vVUOMecPAfTmh82/78CpTDw49kYTjbn4VR2rrcChp/lmrvBIsmEFOF\nThBhL/VJw2RPqx4U6DLRy2rJxEsgrmRrxwc7ARjWyO0A5C2AwNe5cgE0a/eL\nJP3Pj24DOSWSu4EBJj1jfQCSyjeVs6eH++nG1qkIF9nMTCACueLO+QBs3k4u\nZboFPX0Tcqx1QJQK1zHUF+6XTAwqRyIExgt5+bvKBr97tw0PY6BuVJniSSYb\nuY+nOYAbMiI7/fxEXretv/WqoZReScEu5cS5Q91OZHH1abXZJfrGV6fzr1t2\n7bXjOKTbbo1o3sdAzGCDbPmBSAnCLGpQse+ZlaY5ZfgFCuvG99E7lcOgkaSy\nQnKHCTSIB7IlGCZzXS5kMhCFXqlGHSx34Ix4Fq2uV6CG5CYAFFYWTyD1tyRD\n5G+3aGJQY1IA8uMqU75kwpZ4fNSkMrC/PEEeMDSWK9toesdl8umprXyAXGJK\nwaxm\r\n=oskl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe8J+9R04ZF/33URpbW4LYTqJIJSuJF9oDq5s/2bBYFAIhAJEeDBVb4SgTjbYOsOa9IrAQjwMha1XpPrroSm10RxOP"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.3_1568914325930_0.7421094507315646"},"_hasShrinkwrap":false},"4.0.4-test.1568914679841":{"name":"ts-toolbelt","version":"4.0.4-test.1568914679841","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"09e0c38be54ad69205b77a026e4895702b0fe958","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.4-test.1568914679841","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zOFCITe4gd4bN4NWIQ89PF6eDrHXantNnTNlKswBsIQFaZ5Q5eyOmjTsAB1Z3gakBi7lNtmUXCCYWLpanLEleA==","shasum":"ef3acda450d96c6f6ae529c2c81c4c0252716c28","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.4-test.1568914679841.tgz","fileCount":216,"unpackedSize":207803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg70CCRA9TVsSAnZWagAAc/kP+gOwTt5+yID5Lkqqsv9+\n2Ah4Lzrk8LYteZBI6tqEDIf7BdUBIku0Jli3r8oo++4L6mGlFk2QfbyKT6oC\naJZSQJhE7QSk1OAn7w2lwbQ7ciC3JAvS/nkUukjHZQT5ZfFKvywvWvqjH9DG\n5joERoef6OyDyxhnfG4Qryc58YqNQqL5BqzqIntvD1kCcM6M17krRYt+Lr3F\nlpsoB3yoVkpj/a8PpCRcXNF0WqnNxZJ6t4h+rjhf5g9gfpzT18fAPAs4eghs\nj/tnnMo/Kbyes0hlFV7xMotM0c7yByOUvT/IEWmrGUIh8sL8qc3AjMsVbtDx\nlgOXXEn3l2GzD2gts8HJx6F+HYpEKUbHxAhFhwpnj4ASQYMbGcCBanru4UR0\nbQSU6ltuBO1UAQMKeJXW9KiebSUrZQ3EaU2cgfszCD9MWPfJDrXR8878QRJl\nlfKP7n1Gtmo1m7QaJmcekxYArvnaaEieVi0IeVJQ5b7OaZHUD77UC8LA0I4O\nw0Bjz/rNzWhYq3cw5C2cC+3SVkRtPwlxdiPnFRluljoo7O9SdjuuIcaaJa4U\nbfJ2aVi+Ijz90i+16/+eATs/iza9atP71EtJbQsGdtIs5+35CUyf2fcpGMJD\nwtHHX0ZmDqMYEZdEFkVW/869bQn0AJJi9x1T91rzi6PuRMjfXqiMXLbmyP8B\nSEhQ\r\n=7/3y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFK5jgi9voiX9BllRwrn537mYMGgo07xjhNk+JS61GjgIhAKN6HZybfvsP3ko4+BFO5rMT0oKZPKkjrSFlL9PVjc2m"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.4-test.1568914679841_1568914688696_0.3030338799421406"},"_hasShrinkwrap":false},"4.0.4":{"name":"ts-toolbelt","version":"4.0.4","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"09e0c38be54ad69205b77a026e4895702b0fe958","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6EaSblwtFbaH2FfVuFQj+Ag7BxvYI/nX8TjKx2+4y/FXF7pDLKKYEkjhixd3u5biRlc2bJww0AYEPAzu6znGhw==","shasum":"5ce10732c9c79e7de003c4aad74f78e52aa3323d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.4.tgz","fileCount":217,"unpackedSize":207784,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg74CCRA9TVsSAnZWagAAP94P/1fwzQS8b0Y0an3wRvR4\n7TNL758XOu0lBoGWmJblcB5prCElsu3Igk0giMnfKXTx7VuZfRsDXa8GpvtL\nkE6YHBXCJMtOJ04t7GBuIUj+B67YUi2odGTzgxwNpnguHWac2R7N9O23hz8q\nFUS7ikTJeJpW2IyguXObD0uIZ0ITQupBfIDu1TwtfhHIdiuOWVu/NC3zNFkF\ntqPT/rL7WhTYS08ZwL6MlLe4LpVDKVladkTdzzsNxbL74+ej6zK0RFsfKpCD\n7MU+PNlMJ9GFe6Svi6piGHsuha4GPOA2ivmHsU8uD5Z2eaPnCaHsuBbIasHZ\ne/xoXmBArV5xxBOJmeVliuykO9U75VMyxXWwG/w5hKS7S3A2FJAjru8uty0k\n21DSTF250gfShjvLxO2K/TXPDQ1KZQwFnYOdVE2fKDdPDhGHbM/gZmJyLqGD\nZ18c6VuQWlgk3k3eKNgXmdR+HkglWMI4OgBcR9OYBouvq2oamPa62khG9324\n60+MOHeSvSkAI9KDHm5f7sfaBul8yPWkkq50o3OEYsKgN4jB9OHVdS39hLea\ndcrTrhZX17EX4EhzVZDBqSkNnAQJL8KrzaVQ5PyvsbrDuNlBciCmzfISoIoj\nFHeCnls/63Rg+IAMSA6oTrtqE45Jbxbw94uB+74mJ3wVbwcFL6qV3N0dASWv\nW4gD\r\n=v+pd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoB8iMxyNwHXYdFlDeYQywzxNfBCal6PjMid94nFoNpQIhAPyWRPw11PSZugodvExqGrP3trYgshXdZzB2Ws18aKoG"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.4_1568914945449_0.03262058817749969"},"_hasShrinkwrap":false},"4.0.5-test.1568916807035":{"name":"ts-toolbelt","version":"4.0.5-test.1568916807035","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"ee66397257819423daf51e664fff0142e3755d98","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.5-test.1568916807035","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-iUGHbqka24CiYlRUMeUz/RTkmOHhyqYCqfw7mT7BV6xOhC0SReQiol0rlZiXUBv1JpAGyu//bMm+npu3bNmfQA==","shasum":"ea2339506462507491be0d358dc7af5e2be043b5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.5-test.1568916807035.tgz","fileCount":216,"unpackedSize":207998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg8VPCRA9TVsSAnZWagAAC58QAIqhp2UvYxmn4fcfgnMe\nNb1B+fMb3LJIJG7mo3kIJfBuENRai2NgMaLRTzaxzo8PdpZoQR1poIU0FzH3\n2O1CcV5YnMn+6HzG+WecfRJD6cslS+pn/FICEc8HqZ5py2PgXBfmS0Z+m0rU\n9jcuGWz7R7EgVBCSUE2lu1R4GxP78UKKGbbUuRHMgcBnVHKxNpWChleyhauw\nubrRxRSjFsiTjI9Y9Ptz0lltSrPTPUENtjL4xc7sIxgqs09+OC7gFZHyRWy/\n6XHuII2/a9/35G254ZWpWFVACg+aF7hx5dd0TdnjaTGnD1m9jD45eGO0EXoO\nHpmXV2BbbN/Uoh+Zvo1XaIJuu5pL/yOTefqpe5AGVqqI9LLdDB5BzGh3wqAZ\nUhN0kFi7bo5kme3V+oaT3qPYR7sLXavbdEr0UF5PoHGHlIes+P4YO323z1Yb\nzxG6nxJq/yxWOm4syClUe9nEconwy+m0gykiTMRN4l1EUd2zGRU07XpVc/gq\nYoz/WnX4whu5I4sJiG/hF90X3kPZCLLhNMe55IUcF2wQk/+ObmTjlSdWRdZ4\n/dFQG2cRaw/rCFX5sdnkLhNv+SZCz6mEqdMDBQLCizqFQ6bD8SpCukzlYIPy\ndHecz+jE204iBEEQcja9c1RsZW7GGym6yyoAmG+2xWih1PwkfSL2FT4rnqNt\nnbMX\r\n=jfA3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBJ6qQS+zFor94sWh/g5VQE5hMYxcqCjgOn4s53IZKmZAiB4ruQu5naKWDWJ093Kd9qvGQOYuBhGkgw4ULzTaGBdgw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.5-test.1568916807035_1568916814729_0.9574860881787302"},"_hasShrinkwrap":false},"4.0.5":{"name":"ts-toolbelt","version":"4.0.5","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"ee66397257819423daf51e664fff0142e3755d98","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5NFzvTqIlcoBHdsF15aZ3NK1VU1Cmh0uzOnEV64Ly6khRJbTFcyECDhrFoTHI6Lm+qOSBTBUKuBkMsVa2IOoUw==","shasum":"3ac11fd0d338b5daebb00c6946440a4e5e8f95a6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.5.tgz","fileCount":217,"unpackedSize":207979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg8Y+CRA9TVsSAnZWagAA0o4QAJMx7iGYJJdwYbpelxRw\nDP3bKbJeJgRUEo2Y0gRJvYxlYK+Vtkd8hvY6Xe8xXoA8XsI2nc4VmoeTlU7X\ncZf0L7+ODys/KQ5R8LmT7dHQhdSTRSKXgc56zyCaDFAaqUyEae+HMr4PG+l2\nNlsBQUI1Fp8ClIQ8/gwTADQs4Fe2/BTZ0lyCCjLiCkWpwwr4LJCFbGhT3K+x\n2Y+Eusd6kfldUeW7r7NRZxcGnDC1RHtSaXCOkTCU0InCWmf6etd8Ytvc5roU\nkheAftwALCpKvbTdl2jVE8azMAJt0t5d0fot14Km5fBJoRcLrLqXBRLiBE7v\nuySrbQHdf2Sh3MDk6ZygW9pBO/6dRxHG9o86O/hIa1PzRUXPI9OokfSJjuyC\nHWO4MmU443/ss0xwXyv5j3qS7TQM56BIgfMAjUYgv+bXi005aCPJnHqBAPVJ\ndG8P1Jfxm3hUndoDD8QSEnJLYfV9bkcl52IAP8KrLqh4BA7PpXBgweqya9eG\nmfsItNzXvKWanBWP1y/5karHyuxsgWzSF98i4AjbdroPQjCKT4KKhRN80vlG\npNR+61VHL4PWzpNg0hgSh/HADR+7jNQ7kI59vv5wl2gQbR0YNAHCqbAo1B6n\nZ58BV/nX/NkS1OgfzhVSiF1OBEhNHO0vvtXdYCy7PB9agIcfC726gVYZ9I7X\nayig\r\n=xemN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzSs/0HR4zkdkwUxjSIjaB+CPZEGxsMpSWHA/GxohExAiEA3B5ti4B6w6WlV+2YzpoRIvu1SWNd468FkQypYCt2vzc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.5_1568917054281_0.9540676342776702"},"_hasShrinkwrap":false},"4.0.5-test.1568917827577":{"name":"ts-toolbelt","version":"4.0.5-test.1568917827577","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3629815736a815b3dde47abfa5f1bd1d0d117a78","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.5-test.1568917827577","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-FwAZUNw4S7KcrTFx8Z+V44wfhLpk+jY4qANzb2VSckC/TWKpltJLVeJhvRx7DKP9vMwmgvI7p9BgE3Qh2Zz4pA==","shasum":"fd717f114590db77ed4eae2889c9e07609b0ac1e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.5-test.1568917827577.tgz","fileCount":216,"unpackedSize":207998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg8lMCRA9TVsSAnZWagAAoOQP/iakWZWnjvFbr4IaBK7i\nMa9ZpbD6JibOF7RbfIIVZ3269CUWWrOzNYFUn2cBUomGD3mRXiShAUu7K5R1\nJMkFGZHYSz2RCm1TvukrZHulWj7JhjAlW0y8zuEFpg+wWfY2YY/ix6BvR7Sa\nDngRicSVtn6lE2uSxH1hRASnx3TclJe9dzy/352wVuDuonu4M+HIzIXZuteg\nlX+5em879YQBY7okpVZGpgusTcY9imJP+gtBNWWvleROnpns19OovORhDAQh\n/86aWnMOuHjEOOeuZ+iHQBOM4R6D9CPDDSKc6xopuOenRs0vB5zeEk72ex4E\nUsYXU3oO2msGKNuThMyZLyRccym8CznAvRo6ANdC0jHx9ZwJMyMjli5SkV0C\n0aULY1E+IK5brJZG8EfDZ6fDxiLveVwaRy7x2/v3IxnzOgCpQNE+to+J0t7f\nExUzXLMrOZIhsirW/kPwLkio8L7c2qpxg7J06rH4FIBFlqGtX54mScpMXoJy\ne+LHSNQY7k673HDlgzbjj82OPq5e5kFdhTKFbVoj+27iQ6bb3nA3Tlg+zpzJ\nQMErV6uahWSTTllKoz0cwQ4CXMhvi89IpgjutSJ3zh+Fwqc3l/eUo9DFOaFt\n3JLC1IVX3ncNAvN6Q5JAOR2KoxxQt4il8ysKHw+y6PihV13PbkqsXPMzmoyY\nW+oG\r\n=fkBJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNqRhIpJ5fx+NQIcq+xNPQMjJ9b1mzfal4eTv1ZGj7bAiEAgXfgxJnH4x5Pl8jnCD5VumeMdpBI3F7txDJ9+bglkPc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.5-test.1568917827577_1568917835752_0.07166350706601565"},"_hasShrinkwrap":false},"4.0.8-test.1568920263704":{"name":"ts-toolbelt","version":"4.0.8-test.1568920263704","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"db55dae208e4807898e6c747cefdf9bfcb4fd08c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.8-test.1568920263704","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-1TO6GILOshhEtWuZyf8rmIgtI3ie+PdUNwywT4XltIQ6AEkhTzOi5rUa+1QIKgHpyQdazlk0k2R6W9hmvq2/kA==","shasum":"1585fa5f58bada6ea0bc4e8da19cf266ce760a86","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.8-test.1568920263704.tgz","fileCount":216,"unpackedSize":207998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg9LQCRA9TVsSAnZWagAAsKoP/imdHAS05zp40BXZcnrA\n7WQj8ayuDtCXl8hvmMjyJeyldkrwGQAF7M4Us/I71qxzgDTC6JbSFJD+t1aO\ngk2v29MVXWtMW9Vmp7Lf8kOJQKsel/wh3P/uYvcUPf2x24aHuTcSDvDpB7d/\nv1hspriKB2mtEWP3yDZpdh7ap+8d+WGBaSGK55h5nBQ2ggxYcMN0RGXl+dTj\n+H/9xdGuXmnY3HbBhsTG0NkCphIsyDYfVSvm1LR/Y0MqW75oWzjXofWnaNmw\n2EEHtZ2XypVySLVHmooiTHBxxpzE1OaMUI1LFREiB8RBkKt5XoooxU10lnog\n8y0XbCnfne0vtPAC0rxOuY0Oz7YHFp5pslfybfG1sOsmnbTvmbt48sJU91PP\no2Vzl4Tuw2oyExglq8Ki9elny4H/CnvSirBs4CyPmB+hckGh82QqmcXwXM4y\nHQSk8PEAcLYtQE1RK0ZD6CKGZ6gtU/nHILIGZVMIUmG4VDEmLbAaGsfNKUBK\ncNP9g0EbYUDjLO1Ddk4h4aZQzbo4rb660wXjXWVScv0PwsfnhTVnMyBaoACn\nRiQfeaSlsVOCNh5wIso6PCqsvONunkCJxesS0FRBa3lgM88Wis9BNOc+onZr\nr9f2+raaEbqp5n7LQtB/m4N0SsFoFT7DXjlkDQYJZUh6x+1GbVyxlN83MH6F\nax3t\r\n=H7Kz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvNW4N2FotWARNvSuBOdb7Em0x8GuyCwBZmSLJI60gKAIgPJdBcngmBtw93GHV0SBXH+sapng6+yUcm/cI6+T9JSc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.8-test.1568920263704_1568920271363_0.5540122561452538"},"_hasShrinkwrap":false},"4.0.8":{"name":"ts-toolbelt","version":"4.0.8","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"db55dae208e4807898e6c747cefdf9bfcb4fd08c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.8","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-DQnld3tnTOV4/a98dquqO18uNhTXLc/qdQ2rLAm4NrcSAohN2CT1nKcMGZ0qY46LKhg+HRDHm1neFTsD7Vx/Lw==","shasum":"d34fd57fde4aaf11f4ea71db9ab6921a89b373df","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.8.tgz","fileCount":217,"unpackedSize":207979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg9PQCRA9TVsSAnZWagAAZpEP/R7AG4D+DrL3M9MkRdB7\nIw5z2wIc95vR7TzeqS2QMeQyDtbbyVkAQC6rMMgZneAcFAZ3X1Mru8cyo2Dv\nxEmWBW0yESeC29WUDURQAbZnDSeUtC9BXfoMC6mL789W/7+Wt5els/lQaIUT\n/tnZpVoe2EPYc1gKv5QPq2PhvH0C2htzPVbOUvDWWUjw0aZ2beapD3HET3Zi\nxf4qv6xH720IzSC/uM1exENlU7nxkSbMIo2jaDkBgoh0ChacMzFLznLzN5eW\nCq8VZHgQ2TDD6KhbmOewgCZSL/Ivl16Uuoe3YWpw2J2YM8wgJQU0d/LYZBnF\nIFHJTaHZQrUXJPiW2xrCG1SwVxXtdzpivoRIx7TbEp3I/jB554kYSq8OvZU9\nCrSrpX5Q1Q6mQXBWnS7aqYTqTboHw0AaX55lVM4wbLQrxz/84HEl/4G7X8sr\n2ht8ztE9RRlEZBos4uMWn/AT7zgtfdQD4a/pC9cJOefI5fIt7avnEG5LzX88\nVOaD0NDMQide8GSu0W0ooSKyWrRPJ4fnhzeikP/6U3gqJiM+Cjy8OJZ3MMC4\n1yO3UgyNtaIhsoYX/XTbV+T3We7JZlsamu5g1KgxFM7DyKTh+cN/izxer67Q\nLGDIl4m6AvISuCAUhBZ4Ugh349LDnpnh8w9SuwunTJszERaps19WHkRZHJg9\nK/KK\r\n=y0/K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+TnB4GUyJRRoeHfZiTtNjJ2vpO8qJFUb9ufhDqXeaKAiByu4TII06bfAU9JCLJRLemuhmv5Pva0B7PHRsdUh4K3w=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.8_1568920528149_0.9754958251498285"},"_hasShrinkwrap":false},"4.0.9-test.1568921175804":{"name":"ts-toolbelt","version":"4.0.9-test.1568921175804","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"bdb181cb4aba63b17eaec0d6f7dce6ff130c5ecc","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.9-test.1568921175804","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ShgzbzpQFYXU3vHWz/BhV+8bZFLlHb42U8boKZVi+50PkDDuRh+zgAXrL+mTPHgw7cd5iGewP8Wt2AOUDaxpYw==","shasum":"364be743ac1b7018115d2cd51a68ec7e51f6b865","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.9-test.1568921175804.tgz","fileCount":216,"unpackedSize":207998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg9ZhCRA9TVsSAnZWagAAnewP/0ahhhFwSDcIjYlykAHx\nlnE3qZDtBzVxow86pWFL51r5WTvNX0R46wSCsFpxtetPblTnJpYdSwdbrrit\nyj2H5WvHUV36GpKi4NPN3pqS68lvX6AzD0GlvMHZh0fnex25YBJ16C7rLGC2\n3Ubrujm6Vs73180vF6erAmW01dxHUKYNV697VX4xsg44djLq1c7LVn+kmkWZ\nNhAth3koULWB0dQ60o2321pJkSO2Gp3Fb0VdO7rEsLkHUheeOvynQSzPn32j\n9eHDYIsGMh+rIFuO5k4LRhHWnvRiG+crgVNFjbwBjRyDIrtgNHptqmXc7QSu\nVRa0Litl8PPchPoxknG6oarA4+cbIYvNUf9Xw24646R0GA4FKGzdE5MBtU7Z\nPsqVW9Ppw264n+FGurK/HP/QMSgxMVrA4jxc8RKevkw7iK1PZS244RoTtbc2\nRmz7O305z6d41i9kyrLO/fwq8ZjpNG6SSZlVG+aHHbHUtl+slsOknSIzrhGt\nE3asAxj/YBdD/2fgFpwDKweVEf/bhV9PPq9JHMySL0ii4/vjcP6M7SXk9kCi\nG7JDQhmxM/PNIgJofFixC6iP7Fis/v4GrwOUQ7U04tDQE0jzPeFtyDFu6CbK\nCPXk/RnrmehIWQnKP/Ag1IQDidQO9UnpiiGfWgor38fsTUm2fLztdFlrJBs0\nIeZi\r\n=I49T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4RpKK132gg4aKS65SaL6/1HFVwkOwKQeG1uaH3E7mJAiBJXsXiDK/dRETU0CHc0V6ngTdK8meODB4A9wypezb81Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.9-test.1568921175804_1568921185049_0.20183132880951482"},"_hasShrinkwrap":false},"4.0.9":{"name":"ts-toolbelt","version":"4.0.9","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"bdb181cb4aba63b17eaec0d6f7dce6ff130c5ecc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.9","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Ue69ZLUGOJi5xDvCu6OwxfzAKjzFb1tF1GJYyYmzhWSr/fU6AzF5BAkHDU78SB866KhAzDfx5D2ZQqhv0C+Z3g==","shasum":"c4a7648801e578915320174ce0ff421ccfe84506","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.9.tgz","fileCount":217,"unpackedSize":207979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg9haCRA9TVsSAnZWagAA/rIP/0ZX9qkz6RkuJIZ2jh2Y\n/hX+xvQftoXo5wKJD87sWpwSVkPeCqzxdZa9kScVz6pxFQFaYXEPYnDTX8b0\nPXp3RaJlqfqTsW6mdcHA47ix3qnW6W0nR6qVu77o678xt9a0HX6r3gx+oXir\nnk1Qw0S8+emBcXxlDkUyPfgKDrA0Qcxo3hY6bdiYlbHoIujljXUdJxUGmqGV\nM8+RRpRmCDtEce14Z70CS4nJyc30LVnUtDcvX+o+DRtf72vLsnIekIgBmpxk\nSSK97Ubx7yNZalIdhG3ZL24YDmVu/0CH2BX4JcrUW3ZBbon4tTkbjHOMTEVv\n7yCbUozB982FTTqubJNeE9lyeRMQtx42X86/05tOAo5blPLfpZr80TTLMC79\n6D1S1ZMKUp6jSTJJ3wAyYLjtL9knUmKX/+rAVu0VaXsVw1G9hLQIqkKKzG4e\n69HgbWI3ElQSGWP9VP/iNugOaIIeAajzgnfgpa3+0kGMMTimhWPTHx6ijYcp\nzIoB/8d4ovnto9NQE8fvWGtDvyq/d38//Wl4VVYOhApSVP5AOTXfT7d4Ywn6\nAvBi+vQk7ThH4uRBHYPIqVS47REzeFP1tEUlbBf53NNreDQWBzyZxyvUKEwM\nuzVgp95EpJbAXv1dJeRhSthUF06TOdCAZbwEsk2ZYb78QnK/OD3HvtYKZpuN\nPgKo\r\n=xEH3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDC0UuZK7s7MRoqLfN1ROvAfBOq+vNtPaR11OBB97UVXAiEAju/jPnVejEcHJGhC9joS7Bj4FfeW5E82Kfr7V8oQhNo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.9_1568921690202_0.7034170384475107"},"_hasShrinkwrap":false},"4.0.9-test.1568922479244":{"name":"ts-toolbelt","version":"4.0.9-test.1568922479244","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"840704e2e1eda3118b84a00d73fa52e4434532a2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.9-test.1568922479244","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-F2Fq2DxBwMSOXgU2Z8A6Xq2iDxPSzX4+j6925Vq1ka7WuVf+gsfpq8EKzQO7OtsbeW3VR/qhOHs/5el3AkIDhg==","shasum":"c043e39012e635db8fb7800f39bd720f4ff9802a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.9-test.1568922479244.tgz","fileCount":216,"unpackedSize":207998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg9t5CRA9TVsSAnZWagAAaokP/2tHm+HkjLYIvuaUqjMv\n2G2rxgKkFQsKEhSUlOBkP36nT+Yha5IjWCUpT+VsLTlxE7kHYx6kBRK1CEB1\n4rSGoR8KdGfvaEJSBwYENyH8rEjPWdhKpVZg16bkjmJgNJvu5lKdt0xGvl9+\nwWt2wJdJBRtRjude+k5mYThuVHHsn/W2auQaNO/kyimphX7UtVCvC3Lo11Qg\nWqhIL6fxvv/rBvSuzAaWe5PswmZmovXn2qG3cFWudjpCMWYkGeyE677p2UZI\nxKJwLDeMWl4r+15CDmsmHLus1A0QHWA4KaQd5GDFgsHZkkqvclowtGzfhNeG\nGYLrKeUfAhEfZHU/i/8XFK4w3mh87fHhhAx3k8cYOP61C1uIpR6R0YajbzUV\nCA4J/Uz/adKDQ28lmfwm3HilKI2Z+g6Smak7ZL0MLG7i73hsKK11zuPwQtho\nNdPpK1jvSpBSP+QyYOCRxM9KTEN8iuSibisx6BzLANk2mw3l4kLpZn2Q+5vW\nH7F4dMiNz5bhmJ1+zuSlUstQMF2CrgdGa6mKWx+9xYPKTxQ1HTYw6JtsPvtJ\n/MCkI00OaHKBROuOdjPlPYhTJDmAyTcp8UqbvI2lbeOVEJJY6FWQ82yK3JXm\nMECZJBXWa13PkzIXp7MCaDcVQuSnCi00IBgo7Qb0IV4PbTQXPOwGXe0KwDSQ\n29QM\r\n=ijqo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDv9+NyfJxuip/wkgnDfP5CsMaXzpVnVlyOK9aFBuhLMgIhAM1qG2TqEqLCRVpIKpt4RTg2ewN74KCpK8NilAJ8vEty"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.9-test.1568922479244_1568922488626_0.10224806013366528"},"_hasShrinkwrap":false},"4.0.10-test.1568995953012":{"name":"ts-toolbelt","version":"4.0.10-test.1568995953012","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4f557aa389eb52051412a9b4f9ca7163e9fd686a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.10-test.1568995953012","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-804MosQ/DA5/iC7zb7D/XkHJkQD9PzCa9VVsov1ei510wTe8eWMopy9CY2XGcI12nX6hpMv2744kOk3PfWhecw==","shasum":"fa677853b4ffceabe63460c98ef7f858d7f83006","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.10-test.1568995953012.tgz","fileCount":216,"unpackedSize":207787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdhPp/CRA9TVsSAnZWagAAPtQP/09SUXwb0ErE/MIgvxzk\nvGZINd2FGfmeOXTUBAJ2SKPtZVzz8+inb4QgE04kpK5RLC8p3tCnSMHhAdDQ\n9iPeErlQ1YZPW8+qekkCMCy8l40x84rsuADR5ViDVWXE7o2ro91kSuisxK8i\na8e4PInf1rJcE37EB5fnw7t5fSl9Wa0k/uvFzKl+uTA5OxhmNmOh/mTJJ+pS\n7m2oKYJK5giXYgXCtS9fIgVMISkzbPzgfSZnGF1cZ/ZmiqNoU1q6tJ8E3Rde\n3tQ0r21OR7kFJ0+4MtNkolacIbkzb0Qg90xGt/O+usGEwuv+qxeEybfO5qkV\nI1aA0PGP7OL+hgLZvwXR7YfyX/y07rwmoItiRGpUa0onvDvwf+KE/D064kRA\nPoRypyE1HIHF+LgShqJMMpsdm95t0jqJRI4rl+LGFVGCidGgzCLTE3UIa7CG\nFW/zH6FVhSME9g8aMxcoECMl83jzjR8WGX06Yc1DgAdNK7gYAEtC+qK5lz8G\nktG4/avQgMwELKjAD9QDYE2rcrtdq7QzdGUoxaOZvPrZdqQ0mCzdIWPGQiJc\nd2PTmE+WMX4BNnBZFFJBtVJkpN1gxWOsRcktd75kqK/lehVJ1ARYzbjfCqkK\nHbW5qkuvP89KSm9qX02pdOTXKqGjkqz5qXo3fGDIUdHaMDeFohwbaOrb6PlU\nr8/d\r\n=vdFS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDclJfO4ruwBTTHahqaLDp3B2CAKicOFh4fQEHMs23UtAIgbDXroDJwhsg5+iDg6Re7WS71HVhx5RoI5JJxDcWKn6I="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.10-test.1568995953012_1568995966117_0.4984646705456073"},"_hasShrinkwrap":false},"4.0.10":{"name":"ts-toolbelt","version":"4.0.10","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4f557aa389eb52051412a9b4f9ca7163e9fd686a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.10","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Hs2Vm3QXhNog7p7Hpqo/vY2Mxd3W4SLoKa3n6oez8Jr2OrHdRp0utjRzL5GmZYmPDmjbZqk90Al8dePV+5IUUg==","shasum":"52a54060026abc75d1218d83d69165152a95d63a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.10.tgz","fileCount":217,"unpackedSize":207768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdhPtvCRA9TVsSAnZWagAAcTgQAIpDH3gZWelPKgngXP65\nsVy2H7CW76cSIApaFfomeuNaLl18F/HcGi/s6IP67Mu1KR43uuf95Ysjw0eO\npuL18oofeT+ZhB8h1pi7SriE+tZWv/Wn8s2q6LcbysY7BKzsNKrxLbxfyORN\nSe4Fy8UWYingNeFQ4n7R/6LantittdF+lMjCp3YZMSKhLDpIufH2i7w+2OUb\nxb3Y1+E6Sdhts/3S0/nb7TSLepORbsXt0SDGJiaXzrKG7kMf9ePU8UTVVQAr\na2xRpV3TcC/C49FQC3CpmXjCV+vMPc3cVhvS9g32XFqEqooP7AE+FPCgo9KC\ndMAtFV96ZSYevVqiur6X9RbvXpeFTiZZrjWEF8ZV0Ryjk7fAV4OoPfYf5cvm\n5jvc2aqxw/tyYiJAVafyQqoiWxcnXI/y+PmpSGP3qGKnjN34LjxbTKO3tqPq\nGju/+TaMwUyFIp/BvBnkE2AGYTxjMkFRskfDTfMRwSC8chjKNHrryoxa3CJ4\ngENT9nUiwy1CBHs3YTSEtfkXJXsEXeBXYcRnkzLzWUz5JCIM7TrNtvL3nuT3\ngsUi/uCmV02mAJfr3HsUjTuJ9riIwJzbfV/DW+kJAhAdP/mK8nH3Lz61XBmg\npr0qJd77LsgTlMBwY7irkAnDgFqForlteufG3yIcsoq0Esk5jOtimMFu4KrB\n7ntW\r\n=7jwv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6qAvKCXtEaRG76u+NWIs0p6pu7qD+npBEiY9tL9scSQIhAJcVP6hCfnqpjMIi3+vRcD/EdJ3tV8PHwlLwuEa9ONBh"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.10_1568996206599_0.7815255379136739"},"_hasShrinkwrap":false},"4.0.10-test.1569231375839":{"name":"ts-toolbelt","version":"4.0.10-test.1569231375839","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"2c84e2c069287d767889db320ab22bfbdab0fa0a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.10-test.1569231375839","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-RdVsgjJ+xjyzdk64nRxhcrjBYfqLHJvmR9nz+c86ItoKMA3G+gYYIGJzTS76h6jw2t62tLC+kFS6Y3SXsz8JXg==","shasum":"9be0e5f051c4eb16c7389ec84af46a28fce2593d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.10-test.1569231375839.tgz","fileCount":216,"unpackedSize":207851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiJIaCRA9TVsSAnZWagAAhnoQAI/vAcAS7wlgGeJYgQaj\n5xDeYA3uHoXOW6WOlhoWJn3EGS+hIpMCZm13foFAkjTNntQCdKTPLYf2mQPE\nx8rqI3C7pOHmlYf0DCp9NNjChgjHkdOQpU+mGNo8XWiCN8mRsEiE5WcAYD72\nsXIErbrXvnlt18bqwgAIL/efZT1F+W5F7BtT5mO6d1f87AHn4j/v23nkuOZl\nyvm/nxSH8mj0i4i8+anNDVKa7qbdY1kGtHzNI8UvLuSZgXeNAqdzuwhQ5yX5\npjjlvpao5iMkzoOCFECyIV5+mIR//Ud9Rx+cCWpkZbxvXHIacOrDJhgmbUr9\nnqN+2N5VNF1y8EMmQV3+9xRivDGiMq6zRg5UHvGWH9g935zD6Lro01oPWs9P\nMlvQwY0PQbYi/ehNDHJA7tlfEYUCZPAkaj3abnhDSBzU5ewiLCqPrDMrC/aF\nvb/K1nKGROBIkfO+KFXboVa1ZCLPP3y/zs8BR2y4M7bFNzvAiWZwJa/y32zn\n6F/qj95kvYennukFMRxacP3qZ+fwc3az9SoUVPbzT5enI1vu5PtbjAJAZUaH\np64qRngtqzLcH2OIAbapmgxhxq4sUfp9GifI0Q7wWcwgKROT7aaBtBtT7Pcv\nu+Q3kBvyLC3FHLuPRsaLz9sKLw0ENI7NQUYmm9S9XSGfIL4rlFJPM/DrY8qh\nmPIo\r\n=Hc2D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDyRFIEraME0Q17DMMy599GXvnARiaRO+BHTDZ8m0aMQIgKywVDOjWrZ1OLm5EGeean2+8QHU1lbpubi4fLw2HnIE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.10-test.1569231375839_1569231385368_0.39071191212960654"},"_hasShrinkwrap":false},"4.0.11-test.1569272853032":{"name":"ts-toolbelt","version":"4.0.11-test.1569272853032","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f8360771db83d23e2c41240888eb201625a3db97","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.11-test.1569272853032","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-muy+iEGPd6HHSyaS1LAr2OSfmZWYWW7vAeqcU8cm62R73m23GDKIe09cqJkWfbYnPZtMr62V6l/S6Jaz8QpUNg==","shasum":"110af67e5322ad7ecc4ac268e0c11ec67e7a4a7a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.11-test.1569272853032.tgz","fileCount":216,"unpackedSize":209333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiTQeCRA9TVsSAnZWagAA+PEP/j9Oa4eecPzVvPx85Z5G\nKwHsCn0yXBFFhbBttdM2OvxX/FXLiPPsXFAjX+3bOFizFSQJ+5FgI3mPBbyB\nKBlU2knFexB+y23XZkzhYGpCYGTxWHBhqyutxh3qh+p8RVsonV54RMmlR66r\nVzK79Ebjn2IjC/g94poEV/g6iusieeWzyA2BQpUMeWcrIpXSyjY4Emuerztm\n534s7A7U0pyia03urLU7D/C7KWP+BVRBBXue0m3G9K1NFsBAr+HsvHT8b+iv\nKcKzv7ZFMu5wuG6vG2HgWZf8GqQr5KxOiQmtA2A1S5UZoM3akGGy/LzNbT2W\nNJ9wt9MmmzvtFaGZuogd3UAY/zHDmTs4rjOjYJyo9Wj8F2eOlxfKVD0KrEEq\n20+ee7hdpAdr2AJsLCyd5Yv39QvVz5nhPChbOnTj5PGcLDWGKdg94rglGbto\negzxLVhnJ6n1w5uDl32BrKTU+Dse6CbQ27LkKx4JLF7NXN3y65emsExhS4AM\nKicUOd0+4V9KRi+7EIF0W5DNW5I9Dyhi3418tiBCKKSohc4vR/OZX3op8hiO\nzpOro+e5WrCZALG5CKn2iwJdGRZTszRzoARZ4TnQlBkPt4sm4//2agTuZqv4\nwKTsTwn611WEe3ba0kK9IEqWw2BigiZ9fIJPm0otWXV88wQ5BF0VlN1JbXpf\nHanj\r\n=kFMt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQDdU12PblUtqRjH06fhQKsHpscDDoviVdYk8NQfLkGgIhAMh9LFMrRdqbI+iQ5JcZPOAr7pzPpVT4IYsXRO891Ml2"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.11-test.1569272853032_1569272861473_0.3306162440658804"},"_hasShrinkwrap":false},"4.0.11":{"name":"ts-toolbelt","version":"4.0.11","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f8360771db83d23e2c41240888eb201625a3db97","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.11","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9E+X3G0F51IfeIIrcP4I8EYsxBSNM2up43J5BbHSytWMFtVkWvjuUMXttRWN/p2yLYEXaZJyeAE8Xa/aDI9y2A==","shasum":"14174293e0ac41fd4e42a7a7d45ffddc3538f9fd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.11.tgz","fileCount":217,"unpackedSize":209314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiTUaCRA9TVsSAnZWagAAskcP/2Cl2V4Zw2/kSg1rCsv1\nTyw2B7mr6q6UiojLYD9jmBh5e0en0zWeume+QdXXS0pmw/jtYaGg0m05cJG2\nB/pmU7HrtVJmd8sZfOWGsuXtaLx5T1es9Or2KAIyWGWwt+dYXkxgGOLbO964\n+UhwQPyXw2bUNlpfeirEt01j5FKaWpvGX6eJ+oAj98koPxGw+VpbmoZPq2bu\naRVVVov5IMoz2MHuPaYEjM48QgoKbUvHG5ggHQrKuxejO0s0iBDnXIdmZecL\n/8WdWCAAXYkkClwvHPlPNq/uk8vtuwZ58EBeVrS2p+s1tW4VjfNJZAFjm/fm\nXasPR+cdxt0/UGzi/TMfFVD4tT+aGdhrIgmMM8+Fr4giKl5YwljarZVHCLxr\nP6ebNNw4GD4NJ6Qc0zs/ABLV1e2zqZJFLZEUCRB+Jba12V+Y9lvo8txk7n1L\nb2pkiuvtaESOIQXFRxlreylaScbXZ5H/OLY1H4yKKoA2wvBcDMFPqEE7NQ0k\nOufgxZaLvj2yL8Z9LzlgwBiLYwFqwzuYxR1ycdSTqIz/mVg8EJ/7ER9vgEqy\noJytoKEKxilrFKvNbHuQLM/24pXiearhy41nqoqbszl28n0OmFcfx5TDl03T\nigGj2B49WJe6Pakn0XGyIkAA2AY7ujehQXZBIs4ALoi/xJ9M4k5juM5LA0xo\nGJB4\r\n=SaLT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhzjCj/NO5c4fBuyDuUwiYqSpfTVLbqxx1DyvzS7s67AIhAL/O8+TxWRo+6fATEsZ1oeoRSYXoDXaUs05K+NTeUm7f"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.11_1569273113944_0.47972478191729007"},"_hasShrinkwrap":false},"4.0.12-test.1569282786950":{"name":"ts-toolbelt","version":"4.0.12-test.1569282786950","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4af0db97c9e711f8e01dc3bbb737342a9a0292eb","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.12-test.1569282786950","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-T26jDJzPbAzHJqRnsvwNmYJamAuQdNzjT/7pnMSgeXfdvT3xrXVdfeMTzvt50ZqkidyohB37iMf2qldBzpEhWA==","shasum":"d2b3d1f00526c7eef245c7daba63a6ee09ea77dc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.12-test.1569282786950.tgz","fileCount":216,"unpackedSize":209709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiVrsCRA9TVsSAnZWagAAVEMP+gLQbZWnIqFqBs3uGUKt\nYUmZ28DGgNWzB4E8lYf9qmosu8jr0cwm8AEUmvUxua1Y5gav26WDN+TlZBCU\n0GxDdIeI5U2V4yTAIn5tooKdX9KI9AOX/kBcubJBxal2QG6VOLJ4nTnZPc0s\n+RHLldh5K17fERApGNacwiJf1O9TWM04PBTfiW8gQ7fYKUI1+NFX/ItvHfjj\n0NFU9HgZkzZEx0fdqSIQMFNT4/NKw5XGJ47VOrNkEr703WP9ax0RnjmUCZip\nYVnj4gW/FU55n+S6dQzDTE0am+HiSZOu1hM2jFlugJ1ZCOKVRwXH7RHAL27G\n45e18e77Zng9J8P0eP667dmhqfzT7+MD1+noASoThTju1c/ppHoqor1qZcn8\n+np0a+XXO0/81Z/GqRISlYnyFb7jam2X7jLoJc8cy519dMytpwgHEJRc0E3H\n39uWf/05laD5p2nh+M5sjM0Wv8r2YjMfSvWzedZmuf/FbnhLCvZV0swEdQJs\ng7zaOKWUeneD3ZzwYTYkvfr0HFJuWTtJbmwl5+K/Pogy9job0UNvssI+IXDc\nPkhFkojpiokPc3+YgSZN7sBqKZKjxWpHR7wNM+R5BtNeNYoCjUsYMBm4wyNj\n4csq6O6Hc/DgU63b6GwtLdlPsDj2s+hdoZ/NhMy953ebon0KFSeOAGT6/Lx8\n/Qxr\r\n=xWyU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAkJvO5iqaX53Og2sff3FeQAlnPKHPuYbKqTHl78hmAVAiAek4Wqytpszm1ShKML4nbqctwct4Thl58AZdvVKYBHTQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.12-test.1569282786950_1569282795251_0.6299788153804895"},"_hasShrinkwrap":false},"4.0.12":{"name":"ts-toolbelt","version":"4.0.12","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4af0db97c9e711f8e01dc3bbb737342a9a0292eb","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.0.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-CgdalIFkUzT6q8fyFYEFzrWW3OHXEFGxWeHI2mxVEjHjf4oNQA86cyNm4sbyqIMKPJeglzkNpkckj0tBMf50/w==","shasum":"78dc162cd332c0a37d53c929a4a663d9f64a16e7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.0.12.tgz","fileCount":217,"unpackedSize":209690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiVvnCRA9TVsSAnZWagAAgacQAIfKQxhLdhF+1pLxU8Vy\n+LSoeZ4cwgL9aPIfVWSRou5qYJnnZVjRDkMYYqJS6Z0ZnqgZPC0vUc5Noxdd\n90ilFqf/TPZ4gFVdNkx+wAFf6JTdyQuPfh2x0ug9WLAFzqMeJyiuPUrR7x1i\nT1bWUHmYx48W7D7Y4QMGrPOMffw42NzkM0pbk+WEyswIREN3CKll69N5hbax\nLvLxPUS0bImbecmC0WiL1wZ306NA8ZFLPsMre3VCbGF48dIVsQwao0tpWKcd\nGW01d8TxFMb/YKF7kEr3ac9lbTsXqWF756c+xvnHL5tICIGBBEZoxFuzbaK2\nhBNhb4aSG42dSGjsmJN4khj++U27+gSep0IGGvARMLtLoo6q8oYz7uGCrUa1\n4bJN8bt2V0cOHe08Zq5mvIGUmcZ0Pu4nR/06hoAZuVR0zyHhMH/XhutBiFgG\nQI0xoQ2zuhM3wVSTr0IwH3p60PZm2lS6Uu5vKStWTQndowOua/NNoiZ0jbOM\nPXhK/weByIpH7PI7f+lXzW6qgms9u3OSmkwHYtDLIvtAGwB36fwz75hd38/J\nfIgvdp0smoLhCPt8SOZhWT14l5BInvkrMjV3jhLxrfSTiMxFkR6a07rGLnyv\nuWAkW2n+G5lPNQQIl9blRw0o4OdHMyY3YIMIi07oeiQcH+T2YqNikScqvVLp\n0gYN\r\n=y0sG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3+1QNkjKHspivtD/mTaSai+YUQzz6LwUwsGQbagwT2gIgDDbOeDcg1qCi+3wPlshnCDw13FsCly6/6M0jud8YOBo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.0.12_1569283046373_0.8108911323441874"},"_hasShrinkwrap":false},"4.1.0-test.1569335163881":{"name":"ts-toolbelt","version":"4.1.0-test.1569335163881","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"eae523ec76fe6e249aed1641cec0be9c3c359511","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.1.0-test.1569335163881","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-vWnKGDKbD0Mf81mzp7dnHTuRftVpjAEajqKbGoH/FUg9V7YBEq6+m8kgvKtgon5okk+ZimqfdgpfmO1qCnYkWQ==","shasum":"05152263ad8a589158d0be6c3851b6f9f74e6c37","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.1.0-test.1569335163881.tgz","fileCount":216,"unpackedSize":210174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiieFCRA9TVsSAnZWagAA5n0P/2CsYzHliTbqFmbToTsd\nVIxAKfbw0iUYwoO6Wqx/v6AF/bWRsGgSPotV3KWpwqWVgk69qILNVZjcDtq1\nbe4ZNDoYoz0yGuHxQ4hSMTUXa1uv2slEsoU9fbwcUrY2pHMwrpMrZoFWD1sQ\nILk/B99eVXggXh7vMep+y6m+66RMCVpie9/O8sB2KOZaqjIAv5f2aPfpu2o1\ndcSxleEETYj0j5NQqEuilqzEcrWtwXYuIdvuRX6ojwQHezvn++hngGg92YK4\nGjfZazga8TjVc2xAu1SQmRWSIAGbySE7PDxXZ1q+4arTuL9ZZ9CJQJ5QTXDW\nHRBKFhponNc3E7k2vHKJOvHaFRbrCqZ9iIlcwUV8Ws6w5Db75X8u5Fq8kBbH\n6qmbksCudJUJQhdOUxo5M9JGB3jyIjDR+MXdzKmbjDy2cOaeH3WQDPfGlK2P\n3u5CndvBpsXuFO9S0A8CI23iCFrEpdWqPljFvsNEDNvetEWQp6mDVzB/bY8X\nshfyX/bG1RH3U/i8/2JuPxX0LymyVCBZT9KGK9VJgSrtZ5Tb8yI+pGIF0ZxC\nPzOSqE+OmwGcIf/a0AC9Swt7gURivyOQnt3U0G7X7ZjDWihhqA55ROO1XMuS\n9WR923ByQ4HkP3ddygnSI10Xg3xBFgdiXj0x22QCuCzZ754tcRfz6VJ765ag\nYUxS\r\n=n9Ul\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0pG9cDpZSq2rNRbr4om5K8E1Ngi/9bmy9+ZGl+0AjtAiEAihQ20biUMgmDYHj7juqbxK/EjoIJTEsskjwoj8JhfxI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.1.0-test.1569335163881_1569335172486_0.20047333077645968"},"_hasShrinkwrap":false},"4.1.0":{"name":"ts-toolbelt","version":"4.1.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"eae523ec76fe6e249aed1641cec0be9c3c359511","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.1.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-C7R81bOW5HZyTdK+13lZiu8CYibzcLNuQ5AGsCrT3IYS6hg0EGsxnUt4DI/C7AiqC2byRxoyQ3MotncKZxbytw==","shasum":"a35fedc9fcc1f731ab3dcfe9d8c380dd82121196","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.1.0.tgz","fileCount":217,"unpackedSize":210155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiiiKCRA9TVsSAnZWagAAUYcP/2vyCrCMh0Ufj2OBL21Q\n3V6znSrCAQmv9F91y91Yxdv8vmMQE/r/I0ap/iyvtnIngjHzE/2M3qG2OPsQ\ntmtpyTyif/m08ipdSouk5Tz3IGeLkrNufxLkJyU76YKIWZt3FcjT+8slBw+0\n1duWuMgD358V82+HxDly+pcSRkJ65C6R/bxHyUenH3g7MnzecFXaN9mCfdd2\nXLVA2mbhV/Rf8dZICdKkkIGFypqpCXTITkjNHcad7Mq9wau1TQPG36+rM4kp\nbOk50SfGTjpD/sX2OKnqQnkzR0MkP1HVGK5An1turm82hCbEu6b4rBFABnx2\nZdXqx2z3G00kbu643usrxTukcug+O4fUTjm+RPXYx9yOfJa21WCynPHj5I3W\ndhkbeHdV92kTNnNWXTF346sMGZwXMpN+9VJd1AIyMBwLJv3KwEgJoKKMJe+S\nEC7LfyWTXYI5e5df+omM0HBYz0KB7bajFewgNxhPgjVPi5GElEYNATVkOHzR\n0kcSMQx9HVE2Zrws14NqkTJV0VNbzsY3F7iT2uQMxDNExbYYleq4FSEoNl94\ndR7m8a91ypZSSCfclyVZT1jHfH+BollAh41ycS6ctU+3hd7UzH8YGY1cM3+s\naEn1T989PHRmJsgYBvBLySi2ywZQZb41SLOOKoTjRQkN3LHBiq69muwhd1/W\noHjh\r\n=1G4c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYWyjUsjMzwd+uj+idLyjiYLS+WKLbVdtoTHFHB/2cQQIhAJyj3L+yrgtsHM/zqj4JUnZVA4rkV1bgUH5LVNs8FK9G"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.1.0_1569335433455_0.7350831082670024"},"_hasShrinkwrap":false},"4.1.1-test.1569353626341":{"name":"ts-toolbelt","version":"4.1.1-test.1569353626341","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"51a7eb0bd6468d51cbccb3f0ac1fb42cfcdfaafa","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.1.1-test.1569353626341","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-aGgRbb12eXcJO7wVaFEg8M9A4yPk6V0G6HuNstvcajuuXANUqAh1/biTcg58xAG2DFqv9cqVgCsEr2S4NfXQDQ==","shasum":"0225c7af5a24686ef66bdff6862ee793167dd7c6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.1.1-test.1569353626341.tgz","fileCount":216,"unpackedSize":210349,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdim+jCRA9TVsSAnZWagAATjMP/2uFf0vZ4k834IDeorJe\nKh32eJRtosWcBUAxjX9bP3bVT7P1LY8zFOZMeOEANx4Dh8C9V3+7LSd27gvt\nJtgXTvk5qnSNuW7dGsJQFNH8Pcd0xZ4gY+3cQ9ZkGlxV1dyyXCUJEMcUCJZw\nj1sNNyZLlJ9D2wwaDD662D/8ZKF4m5h5uB2wXk9bYMOD+fj+qQvBlESZwkkB\nZkOVIcY36Upoq68lWiHYcqeViKDO8I0wNbzhjCVtaXxFKeRG2UCSB3ip2B/n\n6DuRO/JRaGXA1yGVwTnUmhXwde2L4sZ9fNsXnvChSA2gi+Rd3eCuCFbxRp0Q\nZM1rlJPJmDo/kniP3SPro/ycxBBWS05BFZt6dDumwb0fAuE2JzJ14BbM3Ui/\n4S9mEzQys8sI+cP8O5ECWWdW8M+yp9+GB1KozroMWATzAZtVpXP6RoMORVYP\nV/kIsjxnolKJ7jLRGlDaUDjN/1w8UvFYH5WiXyKEAiYjuw9BAE56zmlncQZp\nlAv4YmPoiAOF0ky+HjBPIqG36ReGybm3cCR0Latu6wBRTpw0+QInG5Avo1qR\nzvB9+7+EUytGKrcJ8GhalIE+nF4Nre40PNTi9jybjdYdPRG3WQ/vQfLHIV3f\nJtp/8WTr0n6LYDwy8sjg80PMbEOHY3Hwnh6bgZagsKMcvun/v/v41P6NiFeS\nMAd/\r\n=7L6P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpckQVQ5OPffEOLBYHANehVi7VGIlCsXUWqvr2DX4wpwIhALkNHThJS784BCs3OvzRazhb2yLM9xoz4fs+lXbVuMLQ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.1.1-test.1569353626341_1569353634787_0.7061506946554297"},"_hasShrinkwrap":false},"4.1.1":{"name":"ts-toolbelt","version":"4.1.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"51a7eb0bd6468d51cbccb3f0ac1fb42cfcdfaafa","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.1.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-yXBBqXPx1i/VvwrDhCZS/mV+6WC40LvDe7K2KFCkPiZEraaweRn7XzU4BOhTk2nMdA4iB4cz4jg7YLqcsfN/7Q==","shasum":"7867c272f3a51d6a777eff8e97e5168ec58c0445","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.1.1.tgz","fileCount":217,"unpackedSize":210330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdinChCRA9TVsSAnZWagAAlFEP/2fwFYsR2sWI+taV7t+D\nU0Mx7/lH//wxYlGoFIwzJLx6W7LGWcwqtVLQqfOU7RquT99bZDUtuQdeCPim\nPVeW0xB31ccoqXOi6ctQdSObuBQkHNT5drfTuI5NiU34TU/mmamnZYvt3hk6\n0IwwAI2Yztbn3FG50BZ6lTkldIuKitQRJkjBt/55rwLdnSWY19Qhf/++RS6w\nB9vhd4Do8geuIRAEBBKr0+Q5W1J1dukQRyqjo+ZW2XDYiGvhkmP0liTCxgME\n1ouFSNDnvXWyN0wZ9DBHcg3z/l/wuAmKsKwoD37Oa++Izj958InUf+u+X86Z\nKNrNfbtqpWUOWA+0xsaX+kJDWfmCBq73wWSsevA4p+wxBiqmKYgj96lURiEE\nG4++wTT0EcdaOyJBLFzJ7UCTcXmk2/2bjrRc3SEndf/eRKLA2sUOS2IAmyOo\nTH6QCacGTFPF5odV1w+/ntmYxzFr1/+goxyjHqQYY8hZNMk2lgXR/E33kpyl\nDxCtduaZcMgD60LZE4vrl5ND3DbU5t0VyC5IK2HnIRzovq9SVvDB1ic7/Uw7\nCZ+Nr+F8JVOw4NZJsYWoeZdus3bnRxU+gvS+T3wnMAMLODYQ2S4VS3376JFu\n+XS/AX2l9VbLl0YQ9kUQ4RKhKSQX8niHN1PCXLHnTojk0TYHcdplLBNmG4Xo\n6VTs\r\n=3/BV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxNls3dcOSJim1rYaIkxPCAcTaG45NnGudsMRhFEOBTwIgMFM9rnVe8cY3Z22ynH0qFF5W+iGh2LnBEmkQQzlpPQo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.1.1_1569353888727_0.3080657559044384"},"_hasShrinkwrap":false},"4.2.0-test.1569354669966":{"name":"ts-toolbelt","version":"4.2.0-test.1569354669966","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"ae62e86ee94ced5553948e3bb5d8c66fcab75579","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.2.0-test.1569354669966","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-odpOX99gWKMweXML1h7VF/xpL0Ln6SfvU11fQ9FBZ4X57omRwCt1qZ7/0uin72zH6s+W4giETO05THNYmLMP4g==","shasum":"240e31d7a081d1f312366903491e00e92ccd1ebc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.2.0-test.1569354669966.tgz","fileCount":216,"unpackedSize":211162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdinO2CRA9TVsSAnZWagAAiIwP/RXbCF9wzKfiSldWMSLJ\nhT/O4wlpVdJpK3YGjmtk25v5Gu0P7TDJvuEr/kTtE0Ro9o3E38dztSBVCcaS\nQBU8kkmd5Lb9eOFyh2skpv3dzach9XnAiWzfdWiacAnvNpiY2GZeSOI1ZKcx\n9v+HKcwLZ9pI7r+bqZLy+8Hjg2L1SuU/hTDte6HzaNGO/2QBjDKHmL754vhw\nImba/B0AB/t4PaD+P6mnZDJ1KH3o6XiauyBixf9WXlApHoUFIc+ihjprxo2s\nFfADSQCjRvxYCDex5ZsecmbzgxNVLdyx9w9BynxpLIEL+znusmS+NzoGl7IU\nw07PQJyaq37OrmrVy5AU6h8kbDmJ294MIVwmEwWJoriXunWd9V9H4xsVKzyn\nrfSPofTC2KidC9VTvNYPHaqfVON15qG3BbCv6mL0IJXVxaocW++7V/gF7rgB\nUYobgpOe2JOr20oLL2YSsH94cmGku2amipjE8dNBQvWo5Hqqfxi7DUvgGPZw\nW2LH8yYZT4aR1tKi/NVQkTxZ6Eaiye8UqKo7AMaB++k2Em8+mFKUxDQnmZUE\nipqDV0iyfPAwyrfYbr9FOW2HLFjEt4imxAJI3cH06Le4Hl49LWlwvLj+0KP7\nrnoGGU6/WNFBaj7CL8FqLj+AGpV8ArZecQagyyIMvf5A55x0Ll9hApY/T/ZM\nRysF\r\n=Yebg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDa7LVRZEJTAkvneksWMmKhp3qWBVq4HXQ7r22JzOFgIAIgQz95+jwYwYcBHBsjXCUWqV+sJNCAW6bRbjfQXifrzZw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.2.0-test.1569354669966_1569354678147_0.8618273245619144"},"_hasShrinkwrap":false},"4.2.0":{"name":"ts-toolbelt","version":"4.2.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"ae62e86ee94ced5553948e3bb5d8c66fcab75579","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.2.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-JHDZO/OkcKVghvpcP2fMIbuxQbxqEZX1EL8jBGAPz174sXmpFJi3jVGqEHqwYFNUKXkWLyyby8zdWOhCM+wJ5Q==","shasum":"31d513f0a8442805157cfb7ab6911ffca564ccee","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.2.0.tgz","fileCount":217,"unpackedSize":211143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdinSxCRA9TVsSAnZWagAAWoMP/2i1Ubq+STzjmr+QY3el\nxuyywUXQ5jFFKwEx5wtfdC7aJDpwfsRDLik+dJ5boxocb8qWAUeVl0AUNps+\n1O8if51odDHNUDkyEw1IES8QqkOyPgcznTVxdEWBBIekq/hM457L3W2cBaSh\nZeuOvQJO9yhvxRyskQZXru0hhG2MxOCwoFQzgUlb2QmlYJV1HxXuEBqvOUSV\nE3CYMTnognbjk5CROwO/o4zmz+IDmCAUwLETSViC77O3bnS8gQFxIfL+Lgme\nz/1GjSjgw8RePYRk4+CDPHqzfeE79TotJC8dTpWjfmpgoFbo5YYxm86jWPej\ns6v/6kl7HCw5+QhRoUR8/ybN6lSiBU+cgMl4/2FQY7yi7bJdz2wCxVAwuu6S\ntsszN8tvWQJPwsEfjpSriiSEOhSdOlnh7YzQbktYJFwM+saNkSaad0kPRTgb\nLd2FL2gJeDzQ0JLZc6N3WNZkI5xV41vU6V/4ZzUWcLv6RiGMJRx2n3UEr+zq\nTbBdhYEwMQR/LGlUA9xcifDHZXpeyeOD75+oLAhEP8hSa2ZBZXAWNdM4HHiL\ncaLTX+vc8pFIvmqJRNVcA77TJkXNhoknJf+sm7efeW//BkgJ1Oqd8Ro9L+qn\nHFbK6yNHSPpk5v6axC9dcYM3+2atftkN92XYzJYcf0Dtpjutk2hKylpaX9kj\njhh5\r\n=+3k2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/uk4DfhpU8oHiHCXGr+inRz0dP/3cevre0XNfcu/9BgIgOET4TfsBAAkdnmz0qz9yZpfRl+lLhl5G245ffm5LPbA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.2.0_1569354928225_0.6265590020926171"},"_hasShrinkwrap":false},"4.2.1-test.1569355750746":{"name":"ts-toolbelt","version":"4.2.1-test.1569355750746","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"208853a0a4011a3fd175a71be189778ba4fe805d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.2.1-test.1569355750746","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ivv9CEbgf67DWV0jqFeUjPhdpcsN+t8Z1VcsJKEKEummTuAXlLn+GYKa68RID2NFmBrZBIAOhqF5XdoCJ5zdEA==","shasum":"369514ed8840b00295132f05d6a0e415ced8cb5e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.2.1-test.1569355750746.tgz","fileCount":216,"unpackedSize":211363,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdinfzCRA9TVsSAnZWagAAzvQP/iaCq5mpyweYCZgu5XWX\nxpHA+sV4ajIwt0o5mrEgLXDx5bDSlX42kwk4N4jGpIBQ1xTvzeAIBBg2gKtt\ncpiD/AVT2ulOx/16D1nR9K7I6kSTj+snSzCyespCf3ID0JysrVTZ696wOvLf\n2P+XGTsrnLbYdkSgpla/ygPouiNfpb1yZAUPyqAE0E0ZYvE7BJrDA/6UEXMs\n4XtzWHVrAwgR6wVyYA9Y3gRjgy1j4f9N7slN7l8MoS03Oe7M0JZropB8qjLW\nAvWg4GYbAm3q4CZXf+CsWiO+Ebg6vP6JeF/T+8T2HX9pqJTN6E12d71uutTp\n0lZDlvbguRmRHquFu/r0IwGiTpNShcRmqsxcaPst30B3HQ/cgrmDRxq6aWqq\nuFcPq22BkiwiXSWHqnI3tNSIPQ7sqlJ13Tn7O8/pIk/SV6khjWpG51cqjjcf\nMH9GZj2OJbN3yZ7pYlENh/uOIQtgpNdNtu4Xdyjd0eGrmbtaqUFdT6hV9dJ2\nfDvyKJxg/GjDeXb/KrP+MZmn2HeyY/citD15y7Dw5bZ1OZMpqoqPFbQ3onKB\n5fxGVrY+Z7pz54yHLXF/QofDss70M2RsGvAdWsMRdeaNGNZdO3brVqucBvnb\nnO+OHXsM7xfl/oEAWc5jO19xTy6Ff1ClVHpwW+WjdeStCKfT/2rSf6rZylHt\nrtB1\r\n=MPbo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDJEbhSKQJUMQS9S6faOXJQUhC+YW1OynBlSBbwvWTvAIgfaGq7NQfOj60PrluAjPlfdj4UZpcSd7KdNpTSYT13cY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.2.1-test.1569355750746_1569355762819_0.07979207954304934"},"_hasShrinkwrap":false},"4.2.1":{"name":"ts-toolbelt","version":"4.2.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"208853a0a4011a3fd175a71be189778ba4fe805d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.2.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-XsLtN4oic5IdAEWOXyEf5i275piQvWkQfHky+Y2FcCMC3c5o7+u8UMeI9oxOf6OXoIE4AtiXxgXPH64qFWk20Q==","shasum":"75d0f0750e4eae77b6d20e0d9ff976f97560706b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.2.1.tgz","fileCount":217,"unpackedSize":211344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdinkGCRA9TVsSAnZWagAA89wP/27uowp2mknDzhk4M1Vt\niDq6uRqb+K33KLllHUvITuq//o5DfINyKn8Nc1eLf6DSa4TQX+NH7pARhxyQ\n9j8QY1xl8j8QKyfRgZLlJf5ODsLVDyaKvnH7484574PANP+nQw0EVTzYMh+i\nPXDzjTdT8S06GcqVDVBpDCMeNTfZ+zPDXg7cASx+ae1TGVXCiJm4pCiBOvUy\nZVeeFwpNPmcHcs6ZRO0GFXu41IX0hD7epklkqlRjb93nkIRVx9Rc67eCcWFj\n6tVWwyo/WYxpbNIgIqkQd/3DpJbjhKdY73/lpb8qDUosoySQcpFGWqJDtW44\nrifzEaEmN7k2ujyKDLZwPyx7rcJu8pf7oJaQhjK92AlqB2kNqyYybSYHSk9n\nCfARy2b9swPa12vtogxFa4FChFedgTysVB/pLiN5sDLqDVeGFLH4LKEvSzPA\niVmJERyVI7xcKUPWorbK2zaKhY2QB8lnbTnxGlz/jw/7l7vSce9ofRV4+0xD\n53oNmkz1sH9n04czbcOyi09llaVI6DyvmWhPJYd2oVwCEUjHd2+VYcoXDG1f\nW71mbUVwztsuaXZ6oZUnEXA5ALzMFrGr4WN/uelNUItu9sbFYSKTVzQdBIVi\n5bWStlOUUPF86x1dNFOwhh56D9LMgkJgJq32wOmBrcw34yj35RVFFkt+0cED\nt0zF\r\n=bqii\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGebuw4+ylpQDtPfKB7j8KNfHPtGN3U6qI3KQOh/T7TKAiEApJlv8wobEdrA5pPCzHZxd2bz1jX7D23MrUh685naqZE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.2.1_1569356037324_0.226485021975541"},"_hasShrinkwrap":false},"4.3.0-test.1569357763065":{"name":"ts-toolbelt","version":"4.3.0-test.1569357763065","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"e2fe9bb6b00cbd27acf177e2557eda3fbc134b18","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.3.0-test.1569357763065","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-I2gnsPSlYWJE1Er8dBu/6wpY9hgdt2A4SJqYztitKjWnvZkFx7dsGXSiszaP3MUANUPsEanz63sU0p8hcsNwmQ==","shasum":"c8f52bb6281acb5e6735d7b62f99f7b0ab87db68","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.3.0-test.1569357763065.tgz","fileCount":217,"unpackedSize":212263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdin/MCRA9TVsSAnZWagAA45kP/RUuWvlXWj9cwKYEe4ov\nVt1U7i2KMcuoNNFjq4e233PJUg79MdxXyIkQ7YjAAoGwfinkGUOxc/i1pvvF\nV/bxoGYkUAEzOhLrvEkiZoTNik/Hz7oEw0AwJCy4usU3uooKRN27o59tOkT2\nav1Lp0oVxmuKlERRJC2GSE1lgMcX4O9c7GsL0KQgzWKW7GGG+IarlOFsoBrz\ncw2yhbfoLhrltj8loGkasANRudyICFwzRO5FnrsGvhKgfNrVejSnpC3uAjc+\npvuyOMf8/CrLHM06ftuxll+IJIie6q82STzBofDWcoGTh+ij8EMNdxlY8hwR\nn9rrtqW/VijbT2tpQZLlkF/Uc4hSAFiXDs6KiM7ZHbXwFw/hZbFAZJV36CD/\nUFyY1XWfAkOv7jwr8/fFVhWXG87sfw7lDM88a2bcOlyCFll+2gPG2B7x5io8\noXlTt9aWcmcWEA5hK/WxyxRrTljFWapL6bJXL14P9Y3CtzPE9Lh7LJuILNf8\nQVrJ9b+FVv/KAWorqOxwqDob7spf8sQ+G6fTJuBsx4gADL9CnQKLtgVYKSx6\nwLmwwiMgLUbNQcDyNTbaNKqqdZgSllR7JeKbYhXrep5J3vSSVFin8k8ynraD\n01p/9sPHcaXRx+zPfTa0cUmvMtj4ZRo36xpNskMtBRJBjzvMbMrkVRjBkRrp\n+MaZ\r\n=7x+4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCak/3ftg3rWGNOakpQ8/Tazs9xZWmpNfzPEuANrboWwIhAP3Azdjvn5QrqiAuaGXNBnK7focrgLu+dPMjD9jZiuIt"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.3.0-test.1569357763065_1569357771552_0.9875581571069214"},"_hasShrinkwrap":false},"4.3.0-test.1569357793470":{"name":"ts-toolbelt","version":"4.3.0-test.1569357793470","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"e2fe9bb6b00cbd27acf177e2557eda3fbc134b18","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.3.0-test.1569357793470","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-AbjtQyhgqJHK1cJFco0W+9fSd40TZ+tJgvtH3aS13JYQ2j20KMcjTpySG2X8l/VB/H7mS7uef9UoChAXHRRvDw==","shasum":"ba3fae37aff30caa26d7257f1e2962c523e1f70e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.3.0-test.1569357793470.tgz","fileCount":217,"unpackedSize":212263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdin/rCRA9TVsSAnZWagAANeAP/irvs1C6L4ERVmeaLhQH\nJQk9VqRVeIF2EJ6zStEPyCvRov6776pQEVN3I/5t0rxMb6yWobRkOdW/X13n\nEsM6/JvMGG6DXeHigjLofrePFRMQkdTCK5+tmj4eC1VqMQf4W0bSpfrS2Ww/\nsxEhDjTx9nz6SGw2h/z8b3xCmgVE/g/ej5Vu3V5xa3eayqHJoeGdRm7Kk9pS\n3ekqcRRI1Qz1cMnL4oHjXi/9tnau/Y77/FTTadfgUfO3JVrMlUq1qikipD4c\nnFuCHGeOLTgsqYB4AwpINjQBZ6abvJfQ6nsmSSf9ntKSJ86VjKovg5VcNJrv\nxxcIcb6sjfN18cr4qEL2FFCMgGTX2cTLYtjAm0fiunZe4UQWBOyaP4cGe2Xm\nOm+2QVZvw49WX5ymPyWVg4hsV281NAjPiBcPx7inNPXhTHgGm79HI7YROPTZ\n4uGO8Osw6wr01nCsqWiKLioqPCPypIzCQXg0c+UUXfwSAlwIXWfswfmL6pnC\n93yToFPO8zYWknwpvO57gruz3BsAE0gHwum6X7YgC08cv28FPwRlgK72hkil\nmsdVL0f0q/eFHZdR9V365Aksh66gXD9ptVI5cy9Dj+k5+yT2RQsGkVYMTsRy\niLQH+Nnt3Qzcy+EBhq+S6HlWm0husPxlmyL0tbjjx82LZtOmy/rjZP68w/HG\n7RNY\r\n=Ne99\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHIC5xO9Ug8Or7TdnhUsraP0DXzTKMm435NghDLq/x8wIhAOwaYjZUM8oyZ5QKUWeVJyYdNOSKvhgV0zpdHr3+eQvc"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.3.0-test.1569357793470_1569357802655_0.7551869359510868"},"_hasShrinkwrap":false},"4.3.0":{"name":"ts-toolbelt","version":"4.3.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"e2fe9bb6b00cbd27acf177e2557eda3fbc134b18","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.3.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-fPFul9MvAmBb3rW3yxaxiB9qjjSVZSUBiJdTy0avCfGxEhWn/VGlU0ux3MVYZjKjBnhs2fqLUR8ooEnfELRBCg==","shasum":"d5f6293e7aa115af7e6abb9a394243295bb089ba","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.3.0.tgz","fileCount":218,"unpackedSize":212244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdioDpCRA9TVsSAnZWagAAhaUP/Aqfu4iTZ2Gn7p6xSyX2\niVfC/1jKbxaIxelaamv78fJWCi/7e1eidNhVfd4Lf2RLh8xG351tfGDGyA4X\nrTtHuMX1goPc6dEnkM7EjbyBXIL6PR1zHRw84SEcMdFMDgWRF9Bh+vjsJLdc\nQu8khcIGZKIU3+gGvZkkU43ZGbLo0WLIfnw61gwMUcCGaG+UJgrR8gDkGVPn\nuwuFNdkaIrK/aJvRRMHhZ8/vgFKqYavjcGmusV2D4xaThLxlbzEHNBxauTkU\ny6Y3ijGg2bePIp116k3zNg/lF8bZU8iQWpG0s3wqTgpEH5EOtMElvHcj/Pxd\nbtP2cjH0vY9pmwItIlVdMo9A/IsJU9+tNz7XjkuJkPXchUBy8p0Lj1cPccEN\nAvvkQYA8H2ey9y+zE0hLc9GTQZTYWg9yzKPZSNjg0l2552ad+/RO9r8iiCQD\n0v9hm/rD4E3zfPBURQeegWeiNVHiir/+vIXxn4JY6UolPZ2B+BQyvSHTmPFX\nmpa2iTEtmz8gbzgERcZuhrV/vlCDKVm1eLgYYVLypKdBd2NOOKlyeHFAnaAU\nQxQUGnaxcog7MD2Z6XjRKsUeihGL2SQ5vpCiB6gt4/O+9YWX+Es4FW4yTcNS\nnwzaarngMowjHStqXRxjnDa3kVC5eZueW2dpSc3Ptgo6Q/rJ9W91/9ulIvpb\nEY4s\r\n=seok\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwjDvylW2eu3K+JlSGRg+XsrzUx0KNE3xTM3WPVw/rYAIgJTWUbYAiQt6ITAmArGvk3cr5StwwvHbeA1TxKdNv8kU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.3.0_1569358056798_0.5977445821427494"},"_hasShrinkwrap":false},"4.4.0-test.1569406254380":{"name":"ts-toolbelt","version":"4.4.0-test.1569406254380","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"71ff8b60023c499d6e91e8a7a02a6fdaa204d977","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.0-test.1569406254380","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-cGcRXzGY/TVn+PeQ/u+OY7zyaawk5nsj492epJvpuC9kzWSMKrEpXe+NE4+HJukVt5PE8vUt9inaH7m6tU2VEQ==","shasum":"f448dc0a514c1fd5ae517c4b6a568a63934b4f0f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.0-test.1569406254380.tgz","fileCount":217,"unpackedSize":212904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiz03CRA9TVsSAnZWagAAJ9oP/0xi7R1C/IJu7u9JFhcQ\nApVmxMrKpqTRW9iy9fv1h2uPTBIyR4OeJZynlz/7cUPUhFALIBi89DOLv9lZ\n9pO+DO34UKwc6Wv+koSs+wkN19JXhxSQq0UkNr8Zr/PDE/bPf6xv1gTt331h\nTMLfihFAJa6Ld7R/mT+yaRmRs6agDti90nXM2O/akGE4yuqKyE9xxcoAAQU2\nOu4Iijzg9TtAD6Yh+FIUor+l14H3Lv5GDVSQ0VNK0caS8NX6U10Ce51NsypY\nWwIB8FGtdENp9/gkstXvzEwszHlEcLBLbYHsOPYDpPouAKE+pWxRVQNwWJb3\nbFe7y2j83aLPpCKoFtmhX5n7jyRJl6EXzpWYT6BLCPuacnJ4tI6ti6lpMO2c\ndUDbJclVmuBryt3pBvqqk5j7ke0DEP7euf5o4xI+vPbJ0p0xEAcVu0YfhbDB\n+uIBXs0OwQZQIJPE1r9//qsB/zeAvLLZKCKHJbiYbWxBUy+8qqRYngeO5UeS\nwm5wp9aJEhhg+prCeaURx3rrqWWJhf5J4y1yxmm/cOWihGFH0AVegYwbJqX0\nk0epTYMsrjSduuKbSdFgW4e0cE1kQFq6yN6jOo7K6+Pn0sVnZ071YJ+pxbO8\ni2HeHNDjGuAELpTt2nafTB/TBcwriGi2NU0Fp0dSue8hnFP57G4JolMjcReM\nueGA\r\n=UUy9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeoHBYVg2J8XvNMZfCrVEz9Xp3YKXnELiZn59LXjThbgIgP37/IdB5fT6nyC+SjDGDjWhzk+4jzfBy6CzC51mSKHk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.0-test.1569406254380_1569406263179_0.6221966149479068"},"_hasShrinkwrap":false},"4.4.0":{"name":"ts-toolbelt","version":"4.4.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"71ff8b60023c499d6e91e8a7a02a6fdaa204d977","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-USd0lVcecWw+0oeW0nIOJ+ZU7JYtQeoieZj+weFEzKkgAbozh5FzEdSMNaQzWdbYDpYLLAE2xQ2j4o//m7MDdA==","shasum":"adcf7b93bc22e5c0d909bf5b1eadfd9ec30aac14","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.0.tgz","fileCount":218,"unpackedSize":212885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiz4sCRA9TVsSAnZWagAAwiUP/iQerIkivib3QQ44/Jn5\nimyGJpYaN5bprxl2VW1WYjo1gILmQ86O3oTuvjv+tx7ZC5zwy/CTyK3YHFHD\nbUfpOqbgIuRaTvuZHPyeQoCCGfaqcmeeh1bJemrrZc3LUDhvW/PgcT8Br8AJ\nEwDnMTNcAd6fO/7IpFamElxBnO8RaaDI4YufqIy7cq1Jnb/xYcVMr7tkVFyU\nG0baI9D5JMgQ3e9grVqf8pIZBg033w+Onww6f0+zvjYTHnIHbiJKi48EIjS9\nS2l/WV73JVVaor4G62Kqx33iyxa1FJM6lufuBXC44L6bYUdw/no7U4dsIxwZ\ncoO2lgfGXH21/iQmnJuO05r+yDLm3vvkh9sj56QdyOVUs7wERLLWrakSlaQW\nivSPGx75yaY8fBJp08FG6/H8OajMLE/5urXx77m1yOWN2vXdiWWTeIwugxpq\nVF4YdmgN2NK5VYs+VlnKCBxOIwkjW/kpZu/bm8/aHBpHODq/YTO0vhsnjpnM\nF7odCMpax7jNU0LnjkG1JmyGPrwhd2iZGwafvIqW5kIH9cANo9n5wmm+xGqW\n64cCiHCXf9aoLLBZTFRpr9kTPCqJetzlHJ6MKJZeFNSGcr39uTr66zroxOba\n0ahsPWCSOd0NJJ9YM4U/YoMTzGrEsQtuNKTYTMJDoieUBwOhhXV4fwvSVUwy\nHs3r\r\n=7oA1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6R96KLxG5S6I1zhhweUZfguajJZHzeSjqnhLrzcw3SgIgcWiWbIhXlURmIRTO06KTjgGtE1vrBzSfaeHc/Gg6/TQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.0_1569406507450_0.6635164876812265"},"_hasShrinkwrap":false},"4.4.1-test.1569406891765":{"name":"ts-toolbelt","version":"4.4.1-test.1569406891765","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"fa682c425e4d0286f4e4d4e68cdd460dd63b0b4a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.1-test.1569406891765","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-1tM0+rFeety00K1y3ZarAbRdGETgSBxP7OGAVSiz48JNKYkGtKy3PVD9jru2d1AHZqT4cigh8kC0LdL9/5FAkQ==","shasum":"747a34851c399d2722d2317862a735fb0be2bc28","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.1-test.1569406891765.tgz","fileCount":217,"unpackedSize":213573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiz+1CRA9TVsSAnZWagAA2eMP/1C8RH/OazcQjtmlwluf\nqzHJObZW+XcAnmTb2bm7eq4kiSEJCpWE0nYyG1HwabdyIwpa4xjaFIiR19PW\nQnvLRJkuP9h/6+Dnj6jL7WB8qbGedR5veQfD5PFDaE5e+icHjycSHhAJit9R\nJ3vodFdiFKUkmlbI3VFLjmi5upwSB9tuwK8lKOpnT7/PVYAJhHTBGerjI24Q\nnjvuCq6SIV9/G//7SxAezwxQRXv1BwxOMp00EbYT7JWWH5LWYTCy77byMZoB\nGxBPXWONO77RWhcPyg+saPpy0fpvmLqC1U9utbgDhFqJOljkqi5VeIlQebB1\n+Xya/DIvks+Wxg2vKTqXKkcrEbCrAeZj7ze9u5n7m4yENR5FrAXN+CPP1+nZ\n2jKLddc7uvhzxie/lPyxD87aZBctcDHZzgSeDDWSIIUCUjk9Ue5IEbAidNHt\n37SZh2gf4Pog8/3NvfQ8O/EymujMI1bBTtGJeJA42IxN2vj60MHCYhE7bDjd\nljipvlIbVu7i9A07Ly8sKyy+QyA84xttNnBDhmpM6f6858fbnTjgdaRnMzg1\nJvKX8WedjTUKuDNeVeCvtvoP7kUd3V9hpbFX+0zT3C0P7udiOX8wGlMeL/n5\nLdbzTb54PWrO5/1LYuLeUCWMLLbi5raejUnBvZXr6ADpAGTWzxrjJoZLedhR\n1UD8\r\n=nkOY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQSxK3TXQFXIsU2iivOWFYHOHITiqwv93ehcwgsGTTkgIgNHwHMf0L6ahf3OtYlkmBFECaQgIH88+SyZFizmdYtms="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.1-test.1569406891765_1569406900624_0.21323144454910326"},"_hasShrinkwrap":false},"4.4.1":{"name":"ts-toolbelt","version":"4.4.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"fa682c425e4d0286f4e4d4e68cdd460dd63b0b4a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9mCCn6lZux8exVH7fcV+FNKx8GNmPvApHA+YMU28qH0SvrnCnRSFDEu9UZGjso+N14uB+PPPCeO2hhv9CaXQ7Q==","shasum":"bf062433a508d16060aedecfaabbfc59a8f1e6c1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.1.tgz","fileCount":218,"unpackedSize":213554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi0CwCRA9TVsSAnZWagAAoTkQAJG9V1SepxGwZdOQ4Btj\nFAgU6a8fO3wVxcVYnPxEgAsBqmSLPksF6+SPWD2VNLOIs3FvIgopW1cyu3G1\n+wxpwbaQc33y0Co3lcJO0nbv8t7NITmcIKkzH6H2j2KPvDMvFhM+tcMDScLB\nvzHqdTdlh4wn9MdkmNoPsZVCHrsXKPEIo1H9gPzxoIaLk5/TPzeA2ZJKL8sz\ni7dgxz+xJlOrhernhUM3Sx8JONzYOgyF02/D8T5MmvGBzzugEbfcpegreYCM\nKOoJ3rTNZKZxIHy2Kl3FRrv0deoFqoouo2xEIHdV3w15BcEhI8UQjRpSRTxh\nRPx7TYfMypHOEtBhkChr7mVmYe1y/6dSzyZfym5E5ctUBNGDVXD2N7Zc3Owo\ncXblo9dbEBxQ98rNy0R8BPZnBfLdkWTxMEtNd3uy5pLR0KayqTyi2/AojVmA\nu7xf3AIfUMHmnpdNssW3RXK3GdKqAOR585ZN+xFkR3hFwfl26xzrp9XfotaX\nJFtHThWiGqJlYIbd1F/9I9dYaUmVBK/Xwy0TSBisDFcaRkoWX+kzmI6HXvI+\n7nEvpWltItmIQBeJTdGHHGoACl0e/6UwjrFNiaShewjrgmVNTtWGdhrJU1+H\niTm528oU+0ONwg4TQCmVCRz2wU0e9SJF0XUBngUdU3m+w2Z3QfoZDy+Z1Gwq\n30gN\r\n=bTrT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPX0pAMfcZQo4ByMSF2F91P4I2Tzk4jx6Lh4SJYTWRIAIgT3EawcfmkQZqYCCKs/6coeYP93UbQktY1vKhR7w0LKA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.1_1569407152101_0.44099335509287463"},"_hasShrinkwrap":false},"4.4.1-test.1569415069989":{"name":"ts-toolbelt","version":"4.4.1-test.1569415069989","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^2.3.1","eledoc":"^0.0.9","eslint":"^6.4.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"163cc2c7e4acf03ec252a39a2f2e5bcd03d2d122","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/pirix-gh/ts-toolbelt.svg)](https://greenkeeper.io/)\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.1-test.1569415069989","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-RAXk75rfrJ/8dvNWmUoINbvx7UbGy9EZKu4+ascnhgviI1fuH28Lj9IH4VL0MKhbVt439w0S6fpT9rH2DZ8qwQ==","shasum":"260c0396aca02dda28024ff61f5ad134982a728d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.1-test.1569415069989.tgz","fileCount":217,"unpackedSize":213676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi1+mCRA9TVsSAnZWagAAkrQP/1CpU0vN403YHMxLbPoD\nmjwxpVhfgtRNGBk30q8NRKNAFGVShBcIvFQh+sBPvcoQrZXHakoV599IFHnG\n2pHIcfNdU063WVnC3JqKyeqdOPUEOqmCrnbT7AuG/mIIOI6taNBWUUL/muop\nS0ROi4/YGA/1QSwo4eiDXWo/Bk9sn8o/3bDVCCLwZFWCnuVcB6othC4doQck\n1gBtlZPCS629ZBvqUi8CD8JFOFEriv1/6NkCRI8/n5+vmeFd/XmGoEStx7Dp\nI58ZN0HwkYgeyeDm5+TmSvUShy9CmCHiX4POJF8wrRyw7slUAwBialbEZna+\nOQPppSOBuUyOyCLo8G/TJ6pxuAJH6D6abQzatEC8p41CFdQ1zsAmVypRFVrJ\neJ0Mnfph36LurezZh+E0W3bpzbVZVBDRtLmm18Bm7RNVJehAWy1E5licL96h\nXiRL3poNE30/zdjVvd2HJ1YAI0IUvGNAd+8Vl0ovVTBAFNDphO1rfYBgF2f+\nXJZuWldG7WENRKRMG6/OahWyYbQLWtbrjeabqk5XIloM3DAJUT8atDIM6rgP\n3/z9hzKIamIfEF61R50jzJBTA6NyU4pLf+tvQs9JrNwN+LR5txYlP/0X6R/z\n5z2xET6busMI0dh716102synfHDonySaSaVjqndpHdG+z9HeZTIXQTLx3yXn\n0Swv\r\n=KF9m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeHKxhknBEMJgrQp87II5rKTaH2nde+92f1Rlp4jKIDQIgdaOc441payjV/pmD+aLaGYb6BolFrg6jVr+HI/epSv4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.1-test.1569415069989_1569415078028_0.012855241143828522"},"_hasShrinkwrap":false},"4.4.2-test.1569415722769":{"name":"ts-toolbelt","version":"4.4.2-test.1569415722769","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"7eb15560101bae9b77b805fe538f020dc177c404","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.2-test.1569415722769","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-e8mI6Fnp0a5Lmi2m/0O1BXHezdT7pi9Jt/x+Gsq7clfVsug3SiuQXP+TEnNF8HAxvuAdmexoVlzw5Ne8W3g6ag==","shasum":"98dc7ff3559dd3c4f1d39efe8f138a8b8c6e2871","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.2-test.1569415722769.tgz","fileCount":217,"unpackedSize":213768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi2IzCRA9TVsSAnZWagAAYK4QAKGoPJigJIyPtJVCRca9\nC2JYB/IKwR9zq6edQf5qfIlSr51a7qI5wzHg58ncK5o/RzLT0pAqm2yvjtub\nPwi04mJ03uN6YJ/fF9vkG82gtqQlQouMHsX7QwyOKCeGnDb7QJqbjeLtBIJ8\nVFq9c4PW5EiLkeWd1js8a4W/9dVCawKTzHg/jLFDT89rtLZ+4JoIxUWgbZ5o\naUiibJNxDutFH3qPHcMB/shXHIXRAWJHrfGNeITrpdQhl4bgm63ZixPAU5qP\n1e89SpuPk8rIX607L75lJbnlLVuZ+TchOgeokvQEAzIBA8fLvLGHFJlG7PgC\nPSA7qEnsC+UPKCwd/0URppm1W4BwHHdqO+EvwPpNrlItGrdAWOtEUCREb8nU\nhopAi4sokhmedb5Cc/zqruZ3Ul73wbrtfz+SqUGMYCHJi5Jgx7m98QLFV4Bh\nV6pvr1eDm1ywQOoDTQtM7MhyerLPYFlY5YT9TiTGOzYr0pl1iRx2HrmKbS5X\n0pjUBLanGY+3M1q/sRFyStS5CsmTFMEUEf9OCgdwSP/C8h0Yr4OGRXB8bU8M\n55i9nOwq/dLt3W90PWP3x/0Fcm0HNy6arIW2kerCNWQwlP2lt9jbDtxuWQ09\nYWJ7rAqgSQk3To4eQw9hM3N4zCEwFhCsp2e4AC2zIXM9RgYfN5fafTj4Oaes\n6LOj\r\n=Tllp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFMx/3liGxNCAorSEbyf7k24pqHw/0Ie/JOXi5ZUwUyyAiAgicEtTu6uKCIYhbcHm4FfWorm3LWG/MTi2N0hKc1ciQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.2-test.1569415722769_1569415730924_0.012869818102697383"},"_hasShrinkwrap":false},"4.4.2-test.1569415838682":{"name":"ts-toolbelt","version":"4.4.2-test.1569415838682","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^2.3.1","eledoc":"^0.0.9","eslint":"^6.4.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"b723b336cd989ab413bd7d14c7b39eb6ae9914e3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/pirix-gh/ts-toolbelt.svg)](https://greenkeeper.io/)\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.2-test.1569415838682","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-FJSli4D6VgbE8dvie2mkpxyqI1B8sElgY82u6ngOf8I/aOIXbO/SkdZ4O40i9l/1RBkGR1xGxd08FsfoknvKYQ==","shasum":"d419e8134a3beeef2b316d1c93c403024ead5a39","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.2-test.1569415838682.tgz","fileCount":217,"unpackedSize":213871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi2KoCRA9TVsSAnZWagAAMrwP/jIcwPPxIAy5GcZcPomA\nsvkCf44zRBamRbd8LREf8kbWkitNOuwrUF6vNaeIYPB6HySmisy/MWGFvBmN\n8USVmyZ2EesFH+frgawed3MQr5uyus3Y6iVEISNQeExSCeqdJR0t1kVCII13\ni0S0eivLpOszKPm+vhF6g0BbxxEy+dx//i9CUgzfh7kOfJAx2CcI6thsXHAh\nNie1Bk87DuBnali+G6K1UYkgQcEPveXdrgI5etAaTSwRzKPetaBzeS9rYUPX\nR223MyD7QLKBBUqwsQ56VsK3sP4t0Hq4vGBcGNenx8pKva/0krCnTR3hr7ln\nrAuvaj55Mcs8aoFFdzRg8IQZYdQhXcmhryrnlv7EcyDlBi2Yw+kqjka6qfOi\nHWzCIxuJSvujs21fmR651GZm8kVIypk4IyddSo3es/LF4z22pn7BAQfT7Xqh\nnOADyTwkHyyLeNTqvUw146PkMOHQcUHBpBsWA2ziUxykvGYS2M00gcLqfS2D\n+uVc7xULOwHNJ0opdg9uCfRFRcgQdqiwej5kP+aa86p0IsMCe3ac8UnGjhHP\nS8GnVYDLtKsdKnn1IAm13YHswlr0yYl5PwFbhYZbo0wgQ6/2EAoq93qIDWfb\nfs/AfQD6t7PZcMPCxOI/QoRefqG7Nma5OL+z2dazVBw0FhkigCi93rOi/eJ2\nkj1t\r\n=X0VV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUvS9jKF9X2nTNgAEj4ml0gID/WqnBLHAKB3a8lD7ldwIgb//dRawqsrbHE5awYK5rR1anFPbYUPinIhVYs6CDCNU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.2-test.1569415838682_1569415847788_0.5720527216435516"},"_hasShrinkwrap":false},"4.4.2":{"name":"ts-toolbelt","version":"4.4.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"7eb15560101bae9b77b805fe538f020dc177c404","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-rXV+F5OYWYMFEwD712h4Mbk8VUtJW5w+0NCrxuCNAFx/JcPXCAN+vH9eToweb88h6GJwGmRFkbTXNkuG5/bIIw==","shasum":"ae753e03fcba185743916013d210b644b2e31777","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.2.tgz","fileCount":218,"unpackedSize":213749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi2M+CRA9TVsSAnZWagAA3wMP/0Fbbs6c0ZvOCXCGVO14\n857Fet9jN9fhPFNsX9i83RXvv9jk4CMG1CyWWEvENB1LuveWeG0zEdwg8HEX\n6be9PmjtUHKXRKZ9yZn0Hfb+EbXDObwfSaYTfItaOStciEitsTdf17NKrXXF\nAFd23Ol845Yrj2Mzd87//9htjs1+f3M48QcEef/ZohRiUrGlNxEhBaH1KscJ\nBIxVFNqoVDPxTOysuwj6rE29PYsQyVfeEdJkER8CIFpOrctHVTJAoc+BxzLH\nt+ngvkf29EDKfv76mC8Z0Va5NIueb3+Za1PLPq/YELQAfeG4rYHbIpeYKl9S\nfTCtyLo5k7VAP1K4pctA5nJzDpOwrGCu9EEv7dUMLuRARrS56QWaxMsvPWTm\n1xhrOAfRpLT2Zde5dhBIhRRezCneBNpnrpowL6JeuWq9ll3UPhl0OHrTHJzr\nVL5dCmiPu57pBzMS3dp5YTUTVY1iYUEXo19bsMtvVNAFjqOSbiA0MY64xdjL\nNupyHkJB/N6zkMUQNDY7IVWDJaiHIBzoyvR3hidg4Z/AL3T3LfdjatJ8cB6v\nEWpeYO/L9JxPVH4vGR0S4exQQkwUNyG1Lb6Fwk9tHJv0TbmbGIxI35OUJke4\nP+PawERXB1sDCOJBOs335VNTSIgejBImdaRckqUxo1IO1gUhhQmDIkHZxpBI\nTHWd\r\n=dnEW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICzIBC8S15WMn+Um7GtRGilAoE5sgGAoJSDhJV2chJSJAiEA65dC8zWCYhzrXDORnmQ7DDDNq1xUyMBzSKxw2kxjTGw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.2_1569415997352_0.4735482491967262"},"_hasShrinkwrap":false},"4.4.2-test.1569417383804":{"name":"ts-toolbelt","version":"4.4.2-test.1569417383804","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^2.3.1","eledoc":"^0.0.9","eslint":"^6.4.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"93c0db933bf1f80b0d8106371e5d3b9cc6d5fa9e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://greenkeeper.io/\" target=\"_blank\">\n    <img src=\"https://badges.greenkeeper.io/pirix-gh/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.2-test.1569417383804","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-D1cCEDbVdBrKYg7zeYW9pWQ53PoSBr+p1oH+zglCTXCWqzqCLpZPN44uCb3mjsTsmtYMRP7N3K/V44RqCk+e0w==","shasum":"4bf8dffb810b16d1d9044ca4a8145b499e0189e6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.2-test.1569417383804.tgz","fileCount":217,"unpackedSize":213897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi2iwCRA9TVsSAnZWagAAk5QP/iQiYJSastewG9JVLGjW\nq8nV6lobnyRjiYb8QR5IA/h4w1lVhWeWj67kWdVw3NJYHVRPSUR4tqTgYMwG\ngVDE5YNnVx0EbW6aWUW6QMRjqyIeEVVqg9JfCOCbqAH54pNPXJZSxphF++YU\nSSYy8KvtYOwHD9hnk/M7WG6bcdey7u2+KWwmrD0yaGhO23bWrDfcq0SMzZzw\n/xBF1Q8SJcQ21aNAw59T/HEv4ntxsc0q5/sJ0ZoAan/QLUV3xozZDiHrH/MN\nhrdz/t9mbDxT4JaKKxl/6KxsBSm+kNtL8zI5v7flhhuzlZ26avMtwWei7Mqt\n+xXLqauuzWkwFyLQ3jPliWyx5h54DPEp8JI6BYATYvEyDPgnPN3QReNMcU1J\nP8MiEUCTydi01x9DfGYhd4gjAONkhEtPy8TDNjQlABQGjNguMWQe4Lygc5H4\ndFehr9M3moN+zqZavX0804MzogWDp3MDfK9iskzlI2OL2yNbdPxO2K2jccPO\nP+LRLDjPy5YdnF5OnQ4QV23r1QTqYDUIG6iv5mtPJhixlGluNfw7aE0ExrOg\nk3vR66Q7PFEOkjOEkjwXJJWdqYyMPK6CgIskVcS7r+mgnTr+awroFNoP/6wE\nTlGeSoOhopyeRKVu8wqkXCkgHwcjEc1TE3CMN/Fhmm0ldJKIkosggLSLQBjT\n7ser\r\n=8nh1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbpiICwWG+L6Kp8P8MMPsurOhkzMWs0U2EW2UOavcndwIhANF9ac1j4XRsOjNw0HUbq1iu9XwjZAyht+rIv6m3rgDM"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.2-test.1569417383804_1569417392078_0.20542692311652155"},"_hasShrinkwrap":false},"4.4.2-test.1569418397438":{"name":"ts-toolbelt","version":"4.4.2-test.1569418397438","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"42facc13a32bdd3db99ade201f718cad0b8be24e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.2-test.1569418397438","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-iOfDzXQsCe9wnMyjlbKpxNpy0rOGC+xJRSU1m91l3gd5lQPyJyLioaHrxTDLq7j7am9OSL+mumum+BIfrFWODA==","shasum":"3da0af2e88c2dcefdb5b051d5e50897a96a379da","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.2-test.1569418397438.tgz","fileCount":217,"unpackedSize":213768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi2ynCRA9TVsSAnZWagAA/OkQAJGC+Klxai/9lC/5CUBX\nKKX0NP+qMe5bRJX8sMbf7lw7uj5/lI/dK441sy4nBm0KKwQGBoQ0uwbnscPK\nxk/OWoFs0+vLLdyhHZ6ovZq85FaZ89SzCWV226119bMdXN/fHTZhNutAQphv\nfwK8HFHarL84W85nOM/pdtsoh4ABE6pjYwDxo/2sbquFkj58QmO94nae0ULa\ntlqRS9aWC7K+fRtXV7X7Sm5/JeHAADeXnPDeaENqL458jU7rOFNOMcZQgmGR\n0fw+SO2MWZQ29yvu521M9E0uIwBmC2aJ8I8aq42h3QM2H834WX1gUIxJ00VA\ndYvh0vtgQJYFsAULT3pDtD22KAu7rr3jD1OX3zd9aohFWzVO2fv3KSsx4ocf\nCwZlMJMgPX7RK9G8ssrnTSjpE3Mlj7a5ax1GEmX0Snv3Zs7HoLyn0TDmaoj0\n0qmf5wRPort4uaVBLwFmu+ibGYxThaXtAlCLr9sH04/u45QNghK3nPRbxUFB\nG6IuXUXzfVACu4HisQP0HmLuLoRNHaB8Yw4Ck4iuqCVQ6B/VM6AtoV4kjmmz\nwuH/o8ecxT6HjLc2j/gRcSyt4hPD2zek/f1S/FBm/86tL+e5L6S1SWVWZqjB\nbX5NivFbFWb0JHLzeeGQufW9BpESIFn5OIvfo6y04z+yDRf+JYKduUrr6tyV\nNCw7\r\n=e6T7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIOvmLF4r4XSZop2MoKNX5CXVrWe6IgJYJDAmBA7vQRAIhAOIZrp7BecguxzSWjbN4l5RBQUcF8K3S1hHMzoJcqs7l"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.2-test.1569418397438_1569418406459_0.47933166095357715"},"_hasShrinkwrap":false},"4.4.2-test.1569418954779":{"name":"ts-toolbelt","version":"4.4.2-test.1569418954779","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"0c5d6b88bfeb47598bb2570604e2998b9ef3f89d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.2-test.1569418954779","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-w2USom9a8D1HLcJsDkJ0BAfI+q2z5xQ066UHMnb5eXYNVV4dTpAxPNh97jygkQlznOQn7G2w8QALVgwBzOjSrg==","shasum":"c49c3ba9a22ce3ffb80fbe4b1a500f741e9e12ff","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.2-test.1569418954779.tgz","fileCount":217,"unpackedSize":213768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi27TCRA9TVsSAnZWagAATzkP/3FlCFBs7EkC0A8m1GK7\n8wmiQBQIMP4nlfwVpAcGBgI/Q1xlIggiQJ3GctN/GrR63yV/CpF42y79eXZD\nJET/PUEeo2urSCkZQwO+98mXx0wjLJ5rxClLq6gRdV5m9t86PAKUsVVnP4FB\ndsUUvqzolj38D3MgG1gIcbrv792gwd92sYASqV73bRms5p9ENz4QWxx8rzdF\nMRwoeDgNH3HIBMiaXMwycFFV1Vujhsf8YQ4Tdh8V+tslIKtX9Bv/DVs5QK8B\nMQQK4CPDjc0PXLln625KVv+BwvlIH4QkX4MkCPrZJ6KB/ZmVcjCL5pFe+TlT\nuGLbYiULzhpYySHxaQGyjCtYOrwWKFtGLHQaTLydD/gZESozyVKG+HxV7mdJ\nuiwCfHvLOBQPB/50msqNS/85YkD+7yV+ofRtOHj9eUCyD23viE0U1Dpj97TH\n/jj6W30sIpxhtMpBxfhv4oo3hJD+JkqO6HuYUd0ZOcYqnhfSZWXsgHXtTueA\nsUhuU/ObkHqvNJAkXz3OkXKDDMxrSl52KjM+qvkLpAbNZQB4j8pnUEMy/bMh\nLcAHEJzhutMUrimDxlRWuwUKRRCAEVMdCtP/jlxGVDlV8zzI/AeVVd555ID+\nO3jWlfk2gZBWp7mGJ/xmKZVRuDrpaevzHcxxRx87KT1Fs18+G8CeSTYAQSNB\n5gIU\r\n=/mU7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICL1qsjG0Pb3N/KhXt2jtAkeugkhgY9HsEfqseoQY74HAiEA7hyfnq8rRmaHBlW0g+8yRWyl8v5Fqzo9ZESmZTbZols="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.2-test.1569418954779_1569418962436_0.568587883741104"},"_hasShrinkwrap":false},"4.4.3-test.1569419434673":{"name":"ts-toolbelt","version":"4.4.3-test.1569419434673","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"f9f697f2826128bf6dc3826d7958ca885b37f30a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.3-test.1569419434673","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+CgabZZDlY1RuAMm5JYaJxZ6xO7TjxmAf3tXuOuiOijxOdtRNctV0zs8DJllx90+zJT3f+x3K4N4IADzWsX2eQ==","shasum":"fa253267421be01676217ad8dde170e063eb1a31","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.3-test.1569419434673.tgz","fileCount":217,"unpackedSize":214159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi3CyCRA9TVsSAnZWagAA7poP/iMQVtmRtWESFDxbZSGn\nU+tVJWxE7CAf4jMWq0uBto8DGYhsjV68c9MtS3Dl3ilA2i1AmGhMEgvqPBMv\nw2IDhCt6Qekvh5gf5tXh6C5B6jMwDCyCBkrrnBKaF9PpETsQJgKIYnaSP5fN\nX8svUH0bDmOuSxk26VGcwUHh+29c9OiksShU/yhb9tHi4ngvkMjrUJTt2Wb6\nIFaDHNAN178bh3xexw5/5Pn2Ao5WmOOYG4KqxRomegafUZcBfaIonWWlJdzK\nM/vkRsj/AHg/G+8M6vucwVeZJdNtVdh5aUATb4pKIAEpNAjqkh2gPswwJsbo\n967x9f4IteMycKp59oxGZ7d2glUApaxUuc3gkkuS5S/oyJJ/v91E4IlbFYpG\nGUBCWWxV5KRXUR80fBlFJRypJFBDey2rZChLqoe236duvAvEZxUreZbkp4a9\nyHcLfDnjWZRYhL03mO/iCfhO5bBrmb2/zvAVXQdUhLV6yrMpc/AJVRibJY0c\nOH2pIC736XqFZ5ot8/WqvmawwCM2IrfY1BUVujYpQKwuhyqbZuWZ3IqGBcpx\nXd4t4Qh5ZSLTEXXvb2Ykk/hxYuTPnXmCWauJKv0/vxSjBohWWTyPW0P47Eg5\nlEhmoc8e3H4CruSSbxwxb9fOAgQJWhStXbnLmR6nq9wIUgsEPOu86hJOieVl\nqLB3\r\n=clvS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFtOxp2acdOagQQKPLGKYJTp/blHyS5NjAW4BK3PFJLXAiBazxeLKQwiEEDv3tXQc5p/52c2KxEMTWP6D3XClzu0SA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.3-test.1569419434673_1569419442285_0.7016626280319147"},"_hasShrinkwrap":false},"4.4.3":{"name":"ts-toolbelt","version":"4.4.3","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"f9f697f2826128bf6dc3826d7958ca885b37f30a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-1ZC1HGwey9bak6VVj8XwUic1MoS5rXEkLsYNP6Kp1ZAmrg3F96fu6CrLBhMNsqhSP4L3epNwPr5Cgrpg2ytofw==","shasum":"e506adc8b816f7aa2007ac952901c88de671b12b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.3.tgz","fileCount":218,"unpackedSize":214140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi3GvCRA9TVsSAnZWagAAfUMP/2eMsMpjf6ZVB0llvtay\njZnioEnV3IiwE3PTm1CBMx7TesPL6e/jzBzKF339jtrnISZ+GGtSb5zkk+K4\noTHMIL7V0nbF6T2PnnoQCllyZOFmPbg7wrAkg0c04ej8iV7kPj/r8l6w2TtU\nPkqvbjlFadwW0R07lQxMyUa/s7XGGXuGHM35QbZoDtC2rjBpmRMfxfrqfFwf\nD4vlVq+jKyZ28o5OlUWR8ygphEAAIvxoVLHcZCJnRQlJg3FiHBHOYu1vMTH6\nROssLQh2i8Hk40kn7qHduJ7ZcTU79WBiNAE2SNG16kY3HzlLlmqDkjlrGeBz\ns1JCxm9oAHVOKSRuDFkkfbk/gvhBgcpwKjCLA86/2JXTBUVKiYnPUED3Iw2J\nPxQ1XdHYDC8ji3NuYVKR36EwzoBKx6UJztix9Sj1ShZFXITTXpNbs/9+9nAA\nzeutefTyc+NhqpqmyZB3SVuQFTkKXvj5xoQ4zKq8YVsO/COMtUCLRseqIkJH\n2HyjdOQhPnBm+qozztlAKtIM8mWWeclSZ6RpbjlRqwX6o6moaLIwfzjF+KqC\nHb2E2XBcf6iizfXRJq9ZYt8+tfH0/XACsj95t/lsItqdHD0j5MTnFmpyOJjx\nh3yt3yZBmtfLiAjZCryNDjypI6QcHrB/Rl9vzjUTOLtaZyWSnSOvGN/deKjR\nB65Q\r\n=W3AL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH3n+582k8IWIvZu0NKgz7TIA8q0OHuAszTzm5gzlX8OAiEAutcNAvQkf9O3C++Ms83/vHGXuqJyfnwQfnwJ1Ng8xIY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.3_1569419694884_0.1331425855079349"},"_hasShrinkwrap":false},"4.4.4-test.1569451452221":{"name":"ts-toolbelt","version":"4.4.4-test.1569451452221","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"a7842415abbb2b3f1d1fa2b5c4fe79b4b512f43f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.4-test.1569451452221","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-iU/EbbR60jcqqU3opPauFXP7VfZZCB7BWorbGAAT23IMX7FcpjeRfUGjmkQGUEyBWuKMdCio26SaFcDn1TJEaA==","shasum":"e51eccd4ac8f33ade9a17a2e1a3742d52f9b7f2a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.4-test.1569451452221.tgz","fileCount":217,"unpackedSize":214371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi+3FCRA9TVsSAnZWagAAjagQAJY9+h4qCSD8VC9CjAuU\nPHqsCiq/ZIXnj3+dcFzbYnP/+bKcmKcHs9wNomx2gFpghJeB53fWFykErLKl\nBOcHgAaOct9KXHvUfH5U9DabD0w996iKdUIskcYv/DipNP71FbjAJCmto2Sd\nCUIb9stlv+D/Y0SvaYGBR/a92koG1KprTQQkyS0+iS4GoiQRSh/lfJtFbEdU\nhT7NmgZeWaq4xjoCgs0rBuUePW2nVV//5m/tTTJCsKAFZ/67B4WxkTIj7pZm\nN8Dm/EbwJqEXUbI1hOweC4MIDmB6YsfkGB5vcwcpsbJElHN0AREB08Q519zL\nFLS5JiGz/HQw/00pEtZMviCjToCWOg3XfZfyq6seniT7mqqz7bI0UZn8yuDZ\ngsAUF0Jd2GXG178q4sdXm9qiPbOPYGiQkXkBTeo9yuV47nSRvmHazFEFUPrI\nben9pvC81TBFmKDizKOqMBFFqIMHvq0yRLfQeUkuStGa01ZTeGI+pw5/kdIV\nCqpHE8Jg3L5sPhDU/Z7MU5WhVAf+9CK1/0MTebymIY/5aSrl2k/ApqKKvCRD\nEtbnCiPSpG5rkHcfbAPi+dxV7nFqabNR4zF52Azeay85MYImIqt/lFmWIYW1\nNyb5eqquf10UxpVGe21WENs+XUqVzXgR2xokq/P/pokAR+8/zPTNjR+ICQ9Y\ndfw3\r\n=zV9A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0KYscCsN7TdBhqdyFhSAM1jX/5oCLNvsvVqIeeN1okwIgG+jIpHbT/jraLlOhECKze0aFZIq91gZVtDskcEsnCDI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.4-test.1569451452221_1569451460933_0.31248777606215894"},"_hasShrinkwrap":false},"4.4.5-test.1569451588754":{"name":"ts-toolbelt","version":"4.4.5-test.1569451588754","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"443ac9f6042841130eabe020d19b706a0c2d1da5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.5-test.1569451588754","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GmlUITAMkNcWxovMA1t7YOQ40x8rOLR753T+LWZG6cKeUhAAaATI+VFRcshtEdajui4jX7oUlFrzu7QGsvP8jQ==","shasum":"98d84a759d05c64635ba1bbb3e125bc44e9869f7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.5-test.1569451588754.tgz","fileCount":217,"unpackedSize":214462,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi+5NCRA9TVsSAnZWagAA9qwP/21egDngIiwdHVFw6XqZ\nhqZybeZUIzhK/eOSkoC63BH1NdF6Gf5HIefGgoIF3eVEj8SzpfhbN8zQ+isa\nGtsPlTSB1e2O2yHIWQFcnqrOgxUWLCaxIyuoSNspkCAhloGCwBGInrtchcpX\n4IK3tf2cGcpS/36vXZkm70V5CAphFYNMEn8LKnJALfLDjnBImH/wRI2lNHug\n/93YtisYHvbwRN/bVA947sgWPrrVp9y/SDNUJimAOqUpE9at3PvvvCL7Yfvq\nSt4maEbpdaVCHoGQ35pEwBBrX6HAi4m70Y/Fh8sGIXL5ESiUGLtWna/X5FVD\n6AT5viVe7diE8ZW2Ry+ytExBim7ZjT70Tw13EYUZQwkvu9v5uJOgLPubTY8R\n+OGS9OEuG95sIfxhwjH2Ju8255UC93qJN1l2dnPOqeQEjEFet+wMhfShjlR7\nN4o788ZJR5rxIwJRZpmUJvd2af3NCjVSu7qgk0znKHGq0EnXMF/9wGD0I1Jk\n56Xsq1XJy0IZYHufp7RzP1mU3KuQnGj+Qa5cDKWA2iD9br8t1Gob8mZL5+UV\nds6J43AVz6YaaAqSMLelDND8EoMOK+GbZEPYTnuRTMAsTRXP9X9B28e2Bu/t\nFtY8TkoFKvjJglmuLY3rfhViMG7pefi1Nkw/IIb7F0fiLg+l79/l4KHvER02\nlDW5\r\n=k3YU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqzEfIJy2MvyPq/ZLRVDVaUV/FsS9Le97vAPQaYNYNoAiAAjGB2kIwH0vz9W/T0RXyR2pc4TUqb5fLBPG4PLSjDMw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.5-test.1569451588754_1569451596867_0.5643273000852309"},"_hasShrinkwrap":false},"4.4.4":{"name":"ts-toolbelt","version":"4.4.4","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"a7842415abbb2b3f1d1fa2b5c4fe79b4b512f43f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6ZKMiZk7UJhHxscAOyJSy0MjsLAPPE40t4yMui1sdMc62SQL2hbrOIydUZYDZ5FWTGDYqi8sYc1kHdMmW8lnKA==","shasum":"a2e0bad39e1a021e3615311eeaebd4a3f4fe2929","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.4.tgz","fileCount":218,"unpackedSize":214352,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi+6+CRA9TVsSAnZWagAABUUP/0uQJfSX9WVz6+Tl9XnP\nB6iNKFMVpqW5geWrOjfgHlwqFp+YKrDYtC4oc/IA+CsgjdASXDwP57AacUHW\nxHBhKrbklLNt/oiRbcIPjdsPfN9uVfoq7NkBrdFse70ntkxJTmzwSliCWAmZ\nFkKhvt43coI/TcWsesQr5eV37Eudxq6tPoDyhMyI5E7y6ylqZXDd5Ypyn8v4\nbOevDxq3Dzikmuz4rcoPa9JMzn1mmVkhyGnHgYvZPsk/X5piKVqW9hLdNktX\nGJ9KjmLnmAPiqBfQ6pkS/c2mX1+Fhf7r2iZ3LFGg1xJjCHcnKKBuFZdLqRjo\nsCA5OeEqZ1s/UhhxVQKHTbO9ivXEloZ56Ra0E7ZHxA/Gf6/kAsy0ani8yYGC\nLKuNiqUtgRNPmwg1eOkftBwNZtbeB0laYvWANsON+Ofx0O4YZxdHb/sDWU3B\nShHOTwxHKqTPpB8pztzCJEEZ2DU1wnaFyV6Dhy2NP3109Oxbc3JoiS/4F5r1\nwvdWMgl2bXCiHl+FperZyHEvhNMeLXd/9gPLOi9k7fmgGB79sor62JCeLR71\n/ANR1t83X9ay70G3dPdMhFmQX4v4lO+INhyleyOi7gbhW1OaHeNvuV/leB25\nhxubJCv1eyQ/OC3lbvxGieysONYGTsDUjYEQ5J9rK+GNRn59Xw4aYUtH84qY\nOJ7u\r\n=RyJ8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFs9HdIPprznvcL24RR4iuLdx/o3AteNn8P/P00ZczHxAiEA4ihS7+fxLqzZOl5kG6paINB7u3nhe1XKFXHLWWjFQVU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.4_1569451709989_0.28445620203439637"},"_hasShrinkwrap":false},"4.4.5":{"name":"ts-toolbelt","version":"4.4.5","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"443ac9f6042841130eabe020d19b706a0c2d1da5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-TWIFoMQON/tnbdE9vOKTfcv36jzVugEh/+QUnHovimpxGgqHOYypRw60E/5vJ0/sF1/brALrWn3oWyNhnaGOow==","shasum":"f50c54d68cae5f9392ea2d8b3149bec54580504b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.5.tgz","fileCount":218,"unpackedSize":214443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi+9hCRA9TVsSAnZWagAAxzQQAJ3csg3a/qHPCv62kusL\n8VhmGJOmX2b3CB/p7oqS10/93P3GzRs2rwtW8cNvg+ijFqeOgv2dyCEj9V5X\n/9QSQzYx7T9duQOYLIhCZ6ofHZtbGFmPUvUMDWBACwxvmA2L0GthbFWdsnNo\nrhkunkG7DyaP/gu/2Hp7RuEmCR9zaih4DlyvVdR5zw/sa/4cnckPT4hGCizc\nF2Tz06VGGG92YqYWg3yTZixB4DNOByu70a2jzWkgdpTd1AtMD68otnQYf60F\nYx/5CQHTkwfCfxQh2+7M5EMWXfrmsVSn/3O86AzbV3SAA4C21GsD3c5eyzdu\nRDMdDIAyNh/BKFfU1K2JeeWYF2lIMg+ZbO7A+7trfYDDFmzZXOLUsAl3TXeL\nRoFxVVOVO60UVEIrHMHgNIUeooXPwzrjmtGGXq3IdDpqaeaTmr1e35yTEC7E\nc5n7mpB4UqKHOE6OshdubIxO8+ZR6387uzjIzkEZltjDxD/xQ4uQGjt1CiKf\np+WA7MdPSk1yRkMF45hyEpa4Q5WnRJKvzBaL70mLemfQ0zjrvZCzK953OBXp\nLvrfLCyvnmYOTpPtemSNnqSKQH0XYlWkGHmX+XJuGSxLckVOAbGUSs3pvwzT\nTA9iGHLxSHVQ4UFi1oR64UtYc4/in5E+Mg6KApVoukieDekpQDapdFfELIVT\nLboA\r\n=sVAn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFrero9M/LcOfizdcD0WfftLpUlMAk5ud7EUbDTybl1WAiEAivcALdLSXixi/xHUUAqh9vXaARCHJbHQ/HaFVFkw9B4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.5_1569451872397_0.501328121577558"},"_hasShrinkwrap":false},"4.4.6-test.1569452409424":{"name":"ts-toolbelt","version":"4.4.6-test.1569452409424","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"ca7d287251e48a57ef52ae0bef66a8c3884ead96","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.6-test.1569452409424","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-dvUURlVisNJin5AY8YCjpb5y5OFGNU6/qifiNOGd+yjl3spPI7JvV+pZW0dKEMMWPAsKorn11TicpCguuOpNfQ==","shasum":"775223d5da20c2ffbd2257d27daaccb23399658f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.6-test.1569452409424.tgz","fileCount":217,"unpackedSize":214659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi/GQCRA9TVsSAnZWagAA+ukP/2TBkZwDY0loZHmBObZt\nrTMpYl9cJ+3VhWf3XvDh6bBY57qhOk2r/LZ0lrdT+TI8Mvb0dYBBOrz1g7dc\nJo/blx6cpbln6/EE8qIfuGhM7va2CtoNJnBbns8okP5i5LGCxWxcDhK62Lb3\nbRYxNvz61fJyawCRxAH9M9oYc1G5mKOwypvWyjioDxLEYgZVJzwjdtnXOX71\nFQU3HM2F6iwUVQ9NlSaJi3P6LTDgHXjSLUgNWsCM5nAXeJgcHV3SbgC7h+Ca\nhsWq6XcEOBuNUoOu3dV+Hki7yGhRTgbui39i7L5QunkLanX4IJauNrpPc3Qt\nGcRxaJZVnPb9e6+zCeNbeRyDDqaY/JozGnQs+lNbGahG+eE++ZaIXaI8P3FQ\n3WDzggE3h8YYaq+oaMZzDGTebhAsPS6lhSXwluuFFpin7plgkcrvtwwisLoJ\nYlL7B1yYOETmMeVBw3hprtwCGjCbk/CyX9dLxQuVaHvIUHL4jWrThtJJG0Ja\nCyKrTWsF0I/KzdGhS+/EVbDXAMHzfCrPi5qjRr/vRy2PhOb46aDF+gNsXGlt\nE3/sYnhHrvy/HZQn5hres+DhRmZw6QxBG74kV/lI/Bz3h23EqbDfiUFxW5Mp\nqLE12MgtXLS7qHOylfuIR53nVTqrgkkdCmZ2GS+z7BnO1qJiq/EeKIVC/uvX\ntl87\r\n=1gEr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgnNewBsqX5xQan6kvmJ7FeM8Vegp7PEnHd+lrJxyCjAIgG8SnbdtLwlviojcbmdXHqxIrSg5AuhQQt4gBf+fChg8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.6-test.1569452409424_1569452431691_0.5831984253201523"},"_hasShrinkwrap":false},"4.4.7-test.1569452464245":{"name":"ts-toolbelt","version":"4.4.7-test.1569452464245","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"0f24dec5bdf4a2cab760e4f5ff3ffbd522a2c707","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.7-test.1569452464245","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-PUDRBdXllkGvq9/3aHVQO5c4kJu6ckbfkQZOGYRl53jtBIcq3BGNNG4z+KmUQ0o0u2S3yoyihtlZlD99TFvZiQ==","shasum":"172e8600c97b3a72ff9631e72b451b52c2c4b946","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.7-test.1569452464245.tgz","fileCount":217,"unpackedSize":214750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi/G6CRA9TVsSAnZWagAAlvcP/jwmK1zSMlnNqDYAOtAE\nqhvGLZeEebYfYurwpwygDh00gu7jD2kwIT8KpVuLDQQCvHDtqZTxggyK7Zkl\nqMlF1kV6/57qpwo2zF6rfeQRZ3AGucFHaUqg1sHvpt9Bcmkrn2EBSYPpOqgS\nM41zTEN1CMQMf1gs2eCvAY1Ijbm/Fg3rQGRVrAInAgoXnPthsaZ4YI5RV+A/\nEpFniy70wZQneia7/ul4EFFCnLGtCWGHNgJ5Kah/L7+tPIzIIEzuDDmp6dJn\ncsenrbK2EbF4iejA55d9h84p9LYHj2WgDlNMaEpmIiW3/8E3mADXI8qqBegK\nc9QTcb95z5jv59UAIKecH91HUoIZSI903pBFTHKw/zOBWubdH/p/Kg3HhT/3\nsV+dJ5Om8PIg5EO31GxiTmd5k7fcJjrszLCo2/VtZfJWQjMpIvXjxz5N4EyB\ntAtqIFs8HUcKbGuMfmC3ZyaDvpLzwtMmzjBVinnwWCPL5eEtEeGMS4mAUa5H\nImwvd+Ewv9/o0WQ5sNSPkchdTMVpbtNtKawcQej2bhxVoJkuWPgZZgzr91P6\nfDzJwN0BXwpzxDOD/eGNqjnLVaUHTom/r1EbG1lumbEz9bQ9LkB0ICr5g8RX\n5gWmQKWg0s9VeiOobEPVmrv23kBYp1a7IrYUA2yZrosQgqGkSQ9Ji0XoHQkm\n5rX1\r\n=zK3e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjBPpdhxgbwd3J4RoWo2j/gZ47uk1JRSiI9OPo41W5zAiEApgx662iMauMu1NoSRQtCLxl6DMGFDf7f9yPOUZDFUx0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.7-test.1569452464245_1569452472947_0.17784960764253221"},"_hasShrinkwrap":false},"4.4.7":{"name":"ts-toolbelt","version":"4.4.7","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"0f24dec5bdf4a2cab760e4f5ff3ffbd522a2c707","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.4.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-1sSqBUiQouoJwGVLzcgz8jTCi2vGCgeQ+UQrNr7oCFRjI4KoQlqtof/wxDPtSKmF+0VQHwk7PBAXIcVNGC/wEA==","shasum":"e2b1c98ce5b1b98ad5c64db542ef9e81abacd92a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.4.7.tgz","fileCount":218,"unpackedSize":214731,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi/K5CRA9TVsSAnZWagAA0UMP/3jgDUvpVo+ZB6Kk5tLk\nVun+/uWk+Yi99XpGWMr44lTMofsbMjaOwjSbIt1GbStSvnbx24KyQ9yzzIKp\nEZzNd9jqNgL9NyuQx0xmu3EP20eJzP4WNpflMy4268CMwXx3nR+GURe05QbK\nnV2rwmr7dp4J8skAgq/KA+AmjYoynInSpLfEp+ADRSGtIX0P/9ciII24t7AJ\njfzscITlzLspglELkQ3cuLxBqk4Ruex8sZjSCSjiG88q3T8HirTvo1VWv38E\n2LSUyifMLKIH9bwTBrq6II4MYWO0YM5LjmbcOF/nKXIeaLCJa7Y+KVMLbjLq\nEnLmJYZFlUoL9oK2udbnmeGFNCXuoN1grLK2dGaYoEg040COlisNzknw0Fke\nYcqQH90CwrKw0SuJN6youPfPETjxwARkCVYtG2sDEy6UBwiwuqubNltDoO+L\nv6eDB7XfxGVPe+MGkw173Y4biGOHzZVJBmxwX2yJL8Yjk2WtMTVus1hM6XFo\nK6XWXdg48fp3/E1KGlSdfzIpO7vuYoc0bdEm1+zLw7q7+fpgZYi7scTnL3t/\nYhsSzPvuxpGiCm0JY89T5xTRm3BDDgDr9MQiG34He/uW1RVw5VasrglHKEXn\nJus5ndpNuznDd7IK8duphVt3dzFyZC5qM/Z1yVSZxuStQJ75t9gqtFeqCy2h\nrBDH\r\n=IMNr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+I5pAj0hgqUONAQjnrgcPoCDAN8d6coeIB24+kvDlLQIhAMYehmr+T8CMVSuF/3HGXBKDQzFynuuhZHLEWwnE+Gon"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.4.7_1569452728395_0.8544844832902647"},"_hasShrinkwrap":false},"4.5.0-test.1569497279478":{"name":"ts-toolbelt","version":"4.5.0-test.1569497279478","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"028e2edf4eb9b36229bfb63cff8a17791c5e313d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.0-test.1569497279478","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wovlaHIjcXYB+qUBQ7Gc4ACGo9urUfgGlroljYeVvYI2E0izZYpf1icRk/XQt5wQ0aLdTi7+bAe0/KnhOfoGsg==","shasum":"92161a36590cd3be892fcfa7484b6e9814f74b06","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.0-test.1569497279478.tgz","fileCount":218,"unpackedSize":216648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjKDICRA9TVsSAnZWagAAtskP/1jAfXnuNQtPicnf//0i\n0PK7ZzTY1c7reu5gR34ThWBi1FDeTw20S54V9oWG3n5kb3Zau0PpTHas96tr\ndttyaj2zMzIWZd5whAc06tIbKeibK+8u/P6P44xv6U2tNHLP8D9DQaiDug7T\nq0weQhiemiQzR/oRIsDEoYrxooDaVF+W55Bk+MPLDXBcNbJ3kPA2gWzQNern\nDWGErQA2sEs/ZvwRzmNS3UNpZi0OdQD0QNO3x0twHR9QU2DQbjxbroXrcs9Q\nOuNq0UdI7uRHMNpFGCbv3idpTl/xxv/ZBg9Hq9nhUjXViCxn9Y3BRrFhw15Q\nJCmWf/zWaF1CBxa8YbtvpayOO27Sp+UJKkquZ3kco5ePBvx9ms/6/BtpX6p7\ncMBqFVVCDPpqyGeh9PfueAVVXyUhCODILh4mbRNfZxpE4iVXut8C49eE3ds2\nmkzdjxZ8KAkrMNBRl+osTU2Mf6JA07MWrocMfJFewXMVV3CUFvFwANG4Ob5P\n4/U7+0zReBYLtmO1p259on8aevaB2TJp6nxIIbKb0nO3Ufj7izxhS646P/2B\nlij3RoJTdR7vEpozJ4ga9GzLPYvJ2FDORjE0lRq98mPQpZZRKSQlM/Khcnvv\nkWUcJdMqN8WzPnlKzvJmRMzzFBPtd5sBiDz7cwXISX0WxcuKe/nFf58cuiim\nKmxX\r\n=eNFs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDS0b2w5aUtNZ7+Lpr4S9FVg5oiej7OajsCT3ts6C8x2AiEA6TMuYwo10qR5O8ZvGqHbTH0vBF9hPqCmJdvEb5Y/gHc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.0-test.1569497279478_1569497288089_0.7041298077565652"},"_hasShrinkwrap":false},"4.5.1-test.1569498757518":{"name":"ts-toolbelt","version":"4.5.1-test.1569498757518","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"b4f5070bc6197a14808e11252f9447454cabe011","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.1-test.1569498757518","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-c14ZIgP4TV7fKgYSAiTF4G+jCr9573V2xfkMcZA/TvYFIbB2vcUl4RXKjyGZoMpDoMkNID42gRMW/eNheUYDtg==","shasum":"3087d7fa7a31039ce6aca125c4db0061fb3c01e7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.1-test.1569498757518.tgz","fileCount":218,"unpackedSize":216870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjKaOCRA9TVsSAnZWagAAgNIP/1sREo4O09g/sb58pD7e\nF+whMuoOSAsgg20Zu3I4ZWRuRmgonInU0NyvURAw172KJVFlWLeA1F0V+P3T\nfHjr8O0TigKdZMfo1QzOOgCPiq+yNMQLAt5OLLLhl/b3mao30uYsQSobd0mA\ny4XSeXseoLT4rnqAXba36Hag+rVYPoNubEZrROLT3h9VDFRVeGeEvWjheSd4\nf/7+awvU+BfMD40AqbYylvf1S/B2jmLbV0MhFL2r+9uzJFAxUoNyuVB1cenL\nhosgwgqZlxp4XAliaQ0CsoZmOIVFTHhRYH+e9vtD/gPMHXcrn0hE0SH/xNqE\nq1ii16Bp1Jv3l5+Ef9vLYYWxAKxGNpp6Pk9Rma5jl66iW1MnJfGsBNuXb5x9\nfodw3lVSe+aD6p7dwgAbdiw602P6kr64IETVhh8E11/So7KjnkOGJDuttZ2X\nvBEJQHnKs0Rd0pkUd6qwGESJNVdtbuNU21Bxrt79X4fmQ1E2DDjYMiiMwGf9\n6d9krc4PGPD82hRwWM4pMSTkC2KL5YMLpp8QcGQeHrQ1ucv+o+BqYTIzca/k\nQgRiwNHt71KGXZdlEwJ22IdEj5yCG72gu22ljtguRPr/8rDzTZWkFrkHBDK+\nLu/ptYqc+M2TerlElX75rO50rqpUfkf4VQMMmEdHyXrvcrxBAEAvmHu+xmso\nHu6v\r\n=KW/+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHdDMhWXjTyyMUkV1CBxLfn486KlCSmbJdibMCnC1QnNAiAcEVV4bu3opc/3pU3REtklJWenBmfjieMrP6amLqodBQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.1-test.1569498757518_1569498766274_0.42255240995986454"},"_hasShrinkwrap":false},"4.5.1":{"name":"ts-toolbelt","version":"4.5.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"b4f5070bc6197a14808e11252f9447454cabe011","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0aasu+zYHXQTEWwWcs3j9f3SltVFk81Tv6cWI65nVSPelsBeecrR7NNl4d0BMv2mGlU4VoOw3TPCalasP+IpEQ==","shasum":"ef68b0531c98b17df3b7518722e1f4bf4fc95f42","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.1.tgz","fileCount":219,"unpackedSize":216851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjKeNCRA9TVsSAnZWagAAvJ0P/1TWi5bCt5OPezTilrh/\nkw7G7SwbE9hf1FJLrIG71wmiot+2e5DWufzxw/xxNFb3/j6dguxriTc2kXyP\n00AIaIJBmP3NEAc6rYbKNFzaLmmgc/pyv85RcMDcAMQ8r8rnDog41f0pRkVk\nr3xf83dH+4th0UNVsjlaz6VCbswybtFCeK6Y8vSfxR1Le0C8TYca5CxqEDs8\nT75AuSHi4RvC2esZJLJIbV1+2PG7Bqgd/JK6+JqJlTIzVAejcqxz5gy2ZdQ6\nENaxK5mOLPDAEXc6wF5sKe8oC5irH2MOOcSG3++b9PPS4HCGDuflEuK9Vg/B\nz/Bwfw+7aUK+pYm2MS896TGMDQYaom16BtSQmxKWALqEAZ/VfliaemAk8lis\nojatTyPIVNBf/L9+VgbNmzSymaxsmweDI41FVKlXqr9lgWGR6tvDYkz7V3k5\n77JNndF6FvPnv55GafEM43P1Bcdwjzi7aFAbAEupVyHPyB64VH1RxdExLuqw\npeQgdBV6JFEe//ASesiAuddBeuhtyqnxDwgfyLWFKSixyVvAppz39jZXJLmf\nFo7HKQIOF54lCjjFUX0zxkZ4erNTYoz93waKK5kbTTnif/gpnll6agL/pfGd\nkMx8H07Qgwqoy3IjyoKMz5oKUkXHFVJ2lmkbxY5S8XKiRNdklQRlzmOZm4sA\nOCZE\r\n=fMLk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMrBrQ1mEEpX/fSTGmBM8V3OjYT68wlZo72X/pK0lSxwIgPUl73Y37Jg0lbCTqrw3Mnlgpkmcsd3oNCmf4jWqO2XY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.1_1569499021094_0.7525417173084965"},"_hasShrinkwrap":false},"4.5.2-test.1569501099762":{"name":"ts-toolbelt","version":"4.5.2-test.1569501099762","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"0ad5df0e2c2fc93099bb1bb5fda0a34e98373475","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.2-test.1569501099762","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6t5q3oMSA6K9aMeHLkxe7MFyeivVmJJqtREvOWK7AlRV7FhHIZrRLeZT/8rqqwBquuPbo50uzFTDCqOfbaug3w==","shasum":"9e1f9a5ddf3aa5f04c96a62e378fdf9b53ade467","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.2-test.1569501099762.tgz","fileCount":218,"unpackedSize":217946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjK+0CRA9TVsSAnZWagAAlEAP/0VTVWzKkdL/ehEFl+sq\nfpDQqoP6Qw+H7VnbDwxwr58Ef/HTGfAd3WuJ7heuV0iXG+xP3E8kklKZBqDW\nYqilcYWTFgN/O2I19SaiFB4j1lR0f11JWQYswgCFCflZMyyRVfMTYQ8yRPZz\nGL3hu3qVwI1cjKbTw1fii4Unp80K6MScou0AcRVgZAUuH8UIQ3Tj05Clixfq\nR3ElyLF0MPDqlzTBOzqR4d477wHnhEBtw4jPzvHzoLwiljnkf3c4WUuRjvNp\nW0Nm2EP7VOSVcDdu1uJ+hdO4Audk06pVwojt5YChZOGaefc2WuAviBt+VpxK\n4ZhfPf73P3ykCrxx/P4oMUFjDc46IzDdFgZkiNJ+Bh5wG4spWHScE1yo+RSJ\najoOXnajD2nKeugTA0S/8qpfhja2MgJjQn9m20CCnckWqMwhsujIHECCgje2\nXvFnm0mwiaJhbUS5MG/jxTptsvOcJcJg5k/r8AYd11H/4NlMSmyKRXFh89dG\n7gbzNc9GQeFP8fZV5kMaSmQulFJ91jRZb4SeyN0sJx6m240UKZ2Z1VpnHZmL\nkfn2tyv3ZIljWxAWT5uCjm9Ajae4T9Ohymmtm00aBeO3dPQDVwnrEgB+jlXv\nbtS0JIO8/05X14LmE8C761xLZyndzB62YXDYc8cDOZhXwEHVN7THQVdTCx9g\n1UPY\r\n=pOwj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFYEaneJpuHYf/lJnUD4tncF/ToRilgM9AD2zoLq/zU4AiEAyZgQmtDfeyEsif9hPKfnHMBrY5fHKoor/C2dU6fo8rw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.2-test.1569501099762_1569501108248_0.5531162817348036"},"_hasShrinkwrap":false},"4.5.2":{"name":"ts-toolbelt","version":"4.5.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"0ad5df0e2c2fc93099bb1bb5fda0a34e98373475","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-g7ZDTK17HhZi5qhFvHLaW/ZzaOlEB+O7GnDaW6ftCEaxhbenVEzPfmeGo2YhMgRjhlYO/dtOmUbv0yykQU5YMw==","shasum":"ab3869ffe6a0c944c44a402b7355643f9b111fc5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.2.tgz","fileCount":219,"unpackedSize":217927,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjLDACRA9TVsSAnZWagAAPmQP/1O15E0RGPMXZP4DBpmb\n6S9tRqGmhx5X/o3GGbUDWiGpor/elyv1a3m3NE39gIgFqT68BF0hQ0hZRCX7\nD9WbrxNvAorOO2QPzrdik40ONUb0BZr4S7yZ/N0dZ01g2TSuSykkmgMwxtVY\nAT6wRIxzT/AekpndeLlkKU08qqbGMuD1WSjrqYcq/7G3Q17v9Nu3COvCJDhv\nUzZwo83v1QqIZOBGES7P8Wukmf8hMtnbagdxpc829GA+41BVStefiDCh3r3y\n0ExwM0xjgFrJ0kVZzurhLCWF8wkLGaH00PbA1ihpQK4r9UTgTTzoaTmCCJk+\nvHUtmup/5qMcnNt6trhWf1Jvg1MCZPaq9Vgd3pdzDsqPorxzr2TetLDSYc4j\nQiWmyK0fyDHB7xmiN00g3x5jEXCkBhuLbY0ydg+KqdEAVcF5PjQwGzptRhYC\nTbilIDKcVCqj6qyFLs8IC2/nsjXzjL64h8CC//6TtBnAI9e86Gk1vBUBTR5o\nnR+LgifSi/Ffj1kEiNJZtAvlXF3cWlnqLSatCYbUtW5oeFov88gTBvGF8nIA\nATBnRE/1BjoClImY3QeA2XzcWLuMpAFyGZVzvtmDqC2Mz7Ns/aBSU+Jptfs0\nzu4FYZjtqzJZAvQcohs7+MbL8nfyJ50PZLA3iaqaGn7al3+h22maqYbmY23O\n0qXq\r\n=agv9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZbg3N833li2tkdpXTC+krGwBewD7E3gRQ87MAGyaBjAiA5OAa3XPFWoyZqOTm0hdTuM8mtKrHx2pj0OFv/8MyVjw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.2_1569501376024_0.8244060858705364"},"_hasShrinkwrap":false},"4.5.2-test.1569586627260":{"name":"ts-toolbelt","version":"4.5.2-test.1569586627260","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"^3.7.0-dev.20190924"},"gitHead":"0ad5df0e2c2fc93099bb1bb5fda0a34e98373475","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.2-test.1569586627260","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pxIWDF+jNI6ZFR4WKWQ1rkAT+4uJbEURfBgESoezITVkH6/mLnxBZs77yEOK8VhcR36o40wIjbIgHi+8zAzSQg==","shasum":"03c8092bd763c0962304850748f3c91f8b198e63","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.2-test.1569586627260.tgz","fileCount":218,"unpackedSize":217946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjf3NCRA9TVsSAnZWagAA24wP/3QGo4O4gzVNM4/I2gLQ\nPCcrWQF8UWK84CqR+M8Q0KsnervV/Q91r05hZk/EKlh7o631jdvft0PcxK5f\nTQnMsbqMxWKdNK48m6D4zCc21SpKBXqWWv4WgF1SGsfxizBXjtD0efYfLxJ7\nS7CWyKVoHkmHRzYQeH6Z41YInhc6fqKDqK+l0QjFz2ZoVrjojuE98AZDTjc8\nniBUMt91/pkYnJj1sQDCNX0UWNKV91WEchZD/2mATM/IfppdqINPcN7e/i5/\ncqGYuadqPiPguYt5hyDEQpTRIy0wM9zuZke8+OoX5rLskLW21Jy+lG0jys+1\nq3+AWB5lP0XHKmcN2NHp/hqqyeJzHxiE/24nzwk5iD+sJKJrEv4NJbhRUMJ+\nLMUjk7CobVT81vUQq49HcT99hEsGOSWKzz5o73yP2ePJUE9puiPh49nlehRm\nwY5w9ufVO9EWIVmVYIRogj/126GQt6Xx1kTF8Xg3a04GDoK8ajd2o2L30Vty\nJjo1gNLVETpPADelPoIM/HgZNe0XIv5SnFIubgESqUaC5Cdmt4P1tujpGzBP\nI2aM6AmEzgzvzdmt+Hdq0Y/W5tXIXrvOsHK61bhWiOfDXjFxdjWbjQQzCDEC\nyw99kPIplqPJNRbF9te04MvBFsVYinfoDWu+0UIvMrhY5hmIZBsvZlnXaXL2\n3zU2\r\n=EWkH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgkRGriZblAA85M/kC3FfN2JEjdFufHeT4fpbTQl0R1wIhAN9Oscode4TK7qw7+TX6AqBHNWT4hXRGnXAs2Y9lSjMV"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.2-test.1569586627260_1569586636262_0.6435040161629708"},"_hasShrinkwrap":false},"4.5.3-test.1569587864220":{"name":"ts-toolbelt","version":"4.5.3-test.1569587864220","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"08b8d806690bd38f04e592f9a49dd062ecd27383","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.3-test.1569587864220","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Wx8CIjsFubhp2dM31P7BP9Db+6E6ygsqBvHPHm6wozML1AkUys96xP9llIdCZq7oi4YnCNBNkb0sPP/d1fjXpQ==","shasum":"4a433c2e9b6ed0f6d1a962f75ddc2340cb9a4047","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.3-test.1569587864220.tgz","fileCount":218,"unpackedSize":218238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjgKhCRA9TVsSAnZWagAALhgP/1OjroGBjRd/L236FY20\nbxZfHt53K5w82aR28yZhwQTu/WENbJxftoeHGaeolqsbvd208eYuzorNcRSC\nU2KeiDxQPJyQja8S1bb+UcMBtyq814TnMV+UKwOSeciyEGo7p8ArMAIoRYBd\nb3EBuOFtl476LscCPbpggE3RahN/Tht6Fc+Q5N8I75OOSFHZbkvnhmwrXbIh\nG8/hqDabFpHRo2Od7iG7kPo7btke41VuhgOuaeXtTnZ8qOjtSA9FgwLfo9Du\ngnAYvo1GthsK3Ckmdb9d+p5t/fuykztChOMVBR8RAAHehHlFrT+WgCGlanD8\n6rtJVFLkEvHSgMnwIIeqcEq9k2wFw0JN579y0bAi+a7dEI0OG84uOfxbBcyj\njSNJ6flPSTRIKGhtP5teYheAlDvewmmHSyL+mhVMMPQnH2k/u2D6rWr0Z6hU\nxg8K2ZTLELj5idB0FVzEc8NG73kOs+Wq2u4DJ9ieIdbz4BqKpNk5vIV2fOmC\nJtp5mKHR56LV2pqDYI15fQQRQHKLrZCCZPLv1FxxmHNiTwyOlzY5jQ3oYMry\nbSQX+8ko0pLjaqFBCL+7pjGxqXULAeDxLh07oI9Uuv33Yg4xnD5golqLFpnk\nI6OIuVgI936GSirdCqg8arhfYa0U5kcX7ZvcJ2SlqvlzNQHo+4QmXr4oiU13\niSJW\r\n=Znb+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjb8pxhziep02D/rxb69gnxi6VRDbXj7mZW7eb1lbgKwIhAKtwraTCaged3Kgn/w929Rt7LSwCZaIHwobINyplXdfr"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.3-test.1569587864220_1569587872544_0.7346867381921482"},"_hasShrinkwrap":false},"4.5.3-test.1569593176677":{"name":"ts-toolbelt","version":"4.5.3-test.1569593176677","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"08b8d806690bd38f04e592f9a49dd062ecd27383","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.3-test.1569593176677","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-nHPA5RDQmBSvksEHgIIYwXdapIcoC6mx25Ch9bvGRQofOdb1XO5Z+jP+4FFeuFOSb5ZDVzppDFWybzsQcTG2eQ==","shasum":"b91e0ec93c9db71276947aeeb769b344b75892d7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.3-test.1569593176677.tgz","fileCount":218,"unpackedSize":218238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjhdhCRA9TVsSAnZWagAAW3sQAIFrfkf5vGhpgUmpJwPy\n8loBVUyCZSY+1t8WejXUfuS49lUw6LDNgZYwstsH/BuoekabxHRsv1mn/lqt\nArN5xNNHxidWZwqnZr8jAFjVMR1KwwWIs7XoMgvfTQuydZBzDLD6kWmkMzWG\nT0AUJincFAy4L+QaUjZB39JtO/9HL5ft8QN4x/Cy4A5FaC+eYFAL2Up/pAR4\nMs/IuWBfuaCQ852nxQeufmbh0PRaGYf/tfG1SNrl/4gaHlgcr8ogStOIb0Nq\n8P3ghrJd1AY9WE9bnAMrB19flDaRC/ANays+CcFkd++j4tAO4oahPoM+uSsg\nXfwm2nII2sJqWjb9QPTVyB1GbsSUpgUnFtm5kj8mddWDWBKbvFxyV5UTCemY\nSajPHVhh/CLwbNfg7qp7ElCD2BkxlepJmXFsspsUa0ZIrDJMtPSJ5f88TZju\nqh1k38VWWqD/24HpgiB78zrwzF8UyYb1CstuU+nf2Sn5pIBcd225BiofhysQ\ngphmOROd3AHq2dMpoJjHFYEoXuosRj+LyKPl9Qj/FDRfAkGx+GcoLceYqVDx\ncMEh8+DKsg3L3j2rc1j7WbGYqF8kkse7de7JKVfqBTX3KoCTxeBjHZGHAQbK\nSelbYy1pNQtCw5ndkN7F3aoVP5xR2nfvl/QxzALU5vMLKuDqQxEk/Sjz5XA7\n8zNZ\r\n=Rbay\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqqiPPieG75BwXIfP36AhRdgGsDijv+MfAZEH1OdDDhwIgWoBPE10COFm7FCC9i/v2YQjm8CxFiPx9jakLVawzrgY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.3-test.1569593176677_1569593184794_0.6326790053523541"},"_hasShrinkwrap":false},"4.5.3-test.1569593598109":{"name":"ts-toolbelt","version":"4.5.3-test.1569593598109","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"08b8d806690bd38f04e592f9a49dd062ecd27383","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.3-test.1569593598109","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-whG+dVWINDdM4LMaTqVlrflru0ChO3OFCZLSeaOgdnSUrLa23Ywu77sfhkTC31Q6a5SyPxR9xTBOmKxiaNi3jQ==","shasum":"ae28fc2abedd3a66f706a68c07e480846a3f697f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.3-test.1569593598109.tgz","fileCount":218,"unpackedSize":218238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjhkHCRA9TVsSAnZWagAAnUwP/3faZ7AXqC3U1+KN0hKe\nKtjl30oixWLo+Fy+UKBKIWjrjM9y8hr07WHjQEbSnzmz/0ngCBkZxBU6rgQ8\nmPj4nO3GGo5N+22kflEFIzgz4GSlQXDf7ik4l/3K0zdqHUWv5hvb98ugMYcC\nIyg00EGzK3/f7Km6tEdgwtNgTpRjy2Pn8c62YmgFvFHgqms5MPxmpTUvnofz\nYla4sohES0Voi5wqeZyklhdjRKM+Qv2nYsQ75vlce13d0LN5TYjETBZlK6f4\nh1EFNMzBFEB3rKKOTA4fmpXgFCqen2JtnU2Tilv3wlro3hNCfAxTtUBs9EtK\nEW4HfBNQh+oZElF67SPZCutzz6R/w8QLYJ5Xgb+Cey1UkKLkD/4tBXMmGvIe\ntnIIAGGEncV/oPbrxsEfYxRvT015xR2s0WIotyq7tWhEymUF4mpkeNAQU/hs\n9yXSuwd/lmqE7GYH39bY7wpobv+aTw0hm6GD4lnc8W5FcrlS01F5okmoVyXk\nFuCuMqIgIKVHZ8bibBIr2a7czIoDlX5bC5YzWVMIJ/VzuI2pFfkogcapZl9w\ngbhsORJFD2qV86TWHbihwkMErPkbdOFsFCSd95vpdXQFMxW8hkp7aX4yizxc\nnbPBnlk9ZvEuUE8vXusQd8OyyKLifGqHPA64tSmRcbQswT0bvyv1aD3XGpil\nRIx6\r\n=Hllq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTS0kLf5fAl3sQbcCdlPN4TiaIaoX26zrKZcOh9g8ZcAIhAO7sRjtJnwFnFKVHsMwF2z79jpprSCHXurKMb8gj4mwF"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.3-test.1569593598109_1569593606405_0.7744748951851399"},"_hasShrinkwrap":false},"4.5.3-test.1569603336602":{"name":"ts-toolbelt","version":"4.5.3-test.1569603336602","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"08b8d806690bd38f04e592f9a49dd062ecd27383","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.3-test.1569603336602","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-T/KDPizbrisnR8Hntj8Qb+byKMuoVNxvTf210DnEG1NllgZS0KCb7/T6e1EQhL+tk9nTL8Jdvke/zQ4KgEU2Ow==","shasum":"859b6ddf338532cf473fd51e485d240b6a503489","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.3-test.1569603336602.tgz","fileCount":218,"unpackedSize":218238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjj8SCRA9TVsSAnZWagAAAJsQAJhYeDepyAdL2Qh0rewc\nbuNiFztowHg3a42vAyFou4yuw50BOvRwVi4Zq5vSme5psiz1DOli+Z0Gzppv\niv7hRN66QItOXfQ8DLh0AhYyCdDKNu3F4sfPkaRPkGh2pk0eikQSGn6Yxng1\nR7lJBa8XdWKD+QeJVI+Rm6YwSlJJ4IiePmxdN8XHU/NzXrGnHoe/7SMJxIFL\nJqElgqYULbtAQrawSs+rxhHmOtZ3J3XPz/mAXDvTgF/zGrEiA9sGHag4nraO\nI6VDMqtHFcGP4M8LkwUWHSXtIZbzsQx4jgiEGb8cfZW1GlWhQa2V5apkd6J+\nXLmlfqpGSWCJBMId7awtSeYawWsKb4JGi0SfVbw30+H5e1ccLKO86hikJhfp\nWZcMxXrzcfNeYmrqYbsKFPbUDVdbdC2Blrdxlkf29SGOCiWLcR4ZHExb7YQ0\nt2y5hCJHYzRiqzvUb345b2TlHAUmskPxD5G/u42Yv8RLaXFGxZLbpzwb3nJ9\nbEuID9J8ODyFcb6h/2M9Qci07y1/ZJVf3P3T1M/vTZQiPStdgaTzejI7r7iN\n6LwbTUEcmtOPOp7yJa8kw8S/rhwpxuYzDP9LjNfMAu3t84mxSgd5dBAloPMm\nBOa0lAYkaAPAdzanGqqarNpWESwNL6ChJOevp3cLt+j90jf9sS6/9ATUifCZ\n/IYJ\r\n=POjc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVoPQ9yr5Q+wMk3zRVusAiWhBmoZ+IScKl5/wMqJcydwIhAM3SmnwmYROiFtW8dIoxIHQ4y52ftlhh4QmwfkvanF71"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.3-test.1569603336602_1569603345401_0.7248902143559397"},"_hasShrinkwrap":false},"4.5.3-test.1569606782263":{"name":"ts-toolbelt","version":"4.5.3-test.1569606782263","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"08b8d806690bd38f04e592f9a49dd062ecd27383","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.3-test.1569606782263","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zLMpoBAEXl/3fYx4x3U08mwIH9lUHfpwQXJiNnMjrtFM7oR7yQ1dc2HUIB/GCZle3n4qSf4oApuF+UcSne1SQQ==","shasum":"e9b518215b5320454c43964ebb31b944ef260558","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.3-test.1569606782263.tgz","fileCount":218,"unpackedSize":218238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjkyVCRA9TVsSAnZWagAARQsQAJoPJZGQQg53qkGUnhen\nkyzBynJduQZwponPqZNdSKDv5aObETnbfRFD/izH/8FpsYajQvTpxT7sHNi/\nLDzKY1xGB7imxcSSEPVMU3IuJjkCKekjeR9XSe2Y3SGhg/Gi0/SyacTpZcqt\n+8oXNTZ2ipQP1gGnq1SpxbeaDEUIRFmknxYPP8fbAQ79bHXQFlzS9j/V3wS5\njCsy6uKQAVvAWF8xdkcvmgTJhyjuu/8KUkEmLsD/SpH6Hv78J05Y+nQXglp/\nZTx5pDP49N9mCQRBoWSrF0jTpKfSGcx+oib8efVTuiG1fctiONx80WzBDIda\nPXX/elh7LGWpe+LCzyAjc8mFaZFaAp5VDN06ydUlftkwtyioUZcGV0NxrBCR\nV+ssfk7vclYTRqGk2OSyjZwKQ9tCNBqeOKkLse0YOyVuJ0IFGStHN8SsJFBf\ndFMDxu9XITB6O9PDTMmu5kov9LqIh4VZe0srwKi+az3ZkaGKfdcw3wVPnyVl\ngQ7uizb4KIidPh+Uoemuba90CxTlFiazdsJMmdIRqWTRk0/1+V1UmQ1c4m6s\npCylF4BsTeSP8UhBKrH5ggzfClOhQMZJZsvULBb65N0aP88CbbugtTrQCwXI\naM+EJ0p8HORXwrregZDcrydaazXLbcOPZAnEcRd7VEYdCe/QbKPTTrYHhjdR\naQYG\r\n=z8uo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBJ8JSD35JeMvnZ3Vj0DYDriWda8ykdyRYUwB75E8r0QIgBaytMuzS+nTwLBlxSFh80QNB8uhrF4vj4gLSBrwgxck="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.3-test.1569606782263_1569606804781_0.44800503157855753"},"_hasShrinkwrap":false},"4.5.4-test.1569611276762":{"name":"ts-toolbelt","version":"4.5.4-test.1569611276762","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d5b1f7ec8cdc0782ddf60f2fe9542bc51c0756b7","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.4-test.1569611276762","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-c4NIFnpjem0264zW5a+sNtRZQc+b70F+EQdMz6KMO+m3LhxElFWzaLdudyQ1geg+6jQnpaZj9MLIUJWb5SE8oA==","shasum":"31d4bf731da2b77ecb980a6ed612183804f1bb94","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.4-test.1569611276762.tgz","fileCount":218,"unpackedSize":218388,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjl4VCRA9TVsSAnZWagAArzUP/2uMjIv/fGRlAC9T29cV\nCSkmmgaUIMN9usBBA59qsnLIlTLdU87xYU4dCuC2PemMJt2AQcleKQZ0VUla\nzve8+rOH1++/PXaX0jqXtZlloEyvpJy5j/PstJqL0IEvUIewnJT9qn1AlCD6\nxa/4pPx3ujmxwfs/rmsorCXL7rzqn3JDNCNYzgI6tW5NsaRwnGLdjxEQlIgs\nLApvZ1CTPmiziZ4PuBqSXHqFLgJGchkSkJG8B3OHiaPjE07nL+6RhaEUnqv5\npq3RH3hA50FMP2smCb8NsT0F7G0nqGtBrVVZsIr8SL8JbNY31eCJAVNv8eiU\nar/GCR6ckOJlnhIad8BKz2kcJ6785pZ78ykyEp9xeL2A/L28tnD4LDNXUNIX\nuO0jHy0Oq6GWxcvYx9X7mffSdVaViFmq6jcJL4hXQ2wxuLm3fAUiU/cL9wgc\n33rqY51hFYJKUerZsVar8vdNTVUEBTebOLE2MZvPnce2IA8rqr8LEWJoBePK\nDFdO4/FwrkvItNrKfMqZncift88Bt1kgyeL6xurccNxS/j6J3IxcPtoXbT2m\nMxeVIYc4ptAJLYv56F+ucHHTWthvS+/Dy0XYSXABr1CfIfYfGyTsrLC52O0x\nJQstNAtys5MrXdiHjDP8NkgFQoXmCbykOBuOKGoWfb2vsxCa9vr3N3kj64sp\nCkqY\r\n=PVrP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFnHvfLeOBihrxnMmec92ihYHDiKxa2A6LvmUEw2mvSaAiBi+Y3uGv6cz7xiSQrAIYrAj+4uD9Fc5L309TzQ6YXUug=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.4-test.1569611276762_1569611284963_0.3610472439272481"},"_hasShrinkwrap":false},"4.5.4":{"name":"ts-toolbelt","version":"4.5.4","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d5b1f7ec8cdc0782ddf60f2fe9542bc51c0756b7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.5.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-DE69tXDXrYOvaiIHHQ+hpn9UL+DmF+yJjZzjmHI4B0+iwEnXl4Azd5bI9eNNJUu5nxC0tFdgjB/nskscSvrUVw==","shasum":"8d85aa818cb63116fac9660f8a791c2c2dc95cbb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.5.4.tgz","fileCount":219,"unpackedSize":218369,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjl8FCRA9TVsSAnZWagAA96wP/jmAkXbGNuCUvZNcl6Mr\nc7b4P/IdBNbqU6WZPEBntQTu9u/L/PovO3QylBjFDfE0EtBIb83pkluB5EVf\nhszcq36x2rC24M5ZMjjxW+1BghNrXrhZW9FaEese9HmmKqUKVUR2LANYkk7R\nocZCxIJDKeAYmyf/AurpZYgM0w5FuKZDjCubES3ZegtOaNQUEH7o4hNY54LQ\nrG0wpbsKzNPeRJkITJH0DtN0PqVDcCQbeM1YAb8yO+eGtqSumZRsOJVfWn2E\nhtA1cHLJXg4HOCxlRfwLZvPTbBco40KemKo6Phi3JzrMcuHRba4Qwspcfjmg\n9sybhCaG00T+czkrTm0lhkR1O5+5yZ4DrRGoJhJ8dMfVvhSHVIMpueol/ywU\nqG/x7HZWcgfzYB4dsJbylBLKrtsKkfFy1DCQD6heJioKzgJQEssID5W/OdHl\nbSBka6inMA8H5Sl6OhtBy7utC4K8oKnABeKvpSX0lfVa1kVWjwBRaxIoJmdb\nj1rOcxka9pwdUclYz3l0VG/WfvYI3U6ekTiWDX42+9bIvTp816Lsqpnnd5Gl\nz9nN5jXlEA8usq1WrZq869qCvpkmD7Xjuo/FxdEUEDtukSPQckhGKSDuH5j/\naOYBgNCJFa6oA6U6INhIDuuLXuvLqk3mY9p2Igh19k7uk4w0LIXtWB8GqL6s\nDfqW\r\n=zIg8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDZ5Fwe6XWTRpBct6GXr8tKQglzyYcXV822qiqX0ec6AIgO/hTELbL5wUoHBYirUv0d3NBAZGiYEJip+fZXeb/280="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.5.4_1569611524608_0.1870839167203464"},"_hasShrinkwrap":false},"4.6.0-test.1569612516542":{"name":"ts-toolbelt","version":"4.6.0-test.1569612516542","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"fae93124012eaa23ef81089fb3d05d7705e3e5c9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.6.0-test.1569612516542","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-TZ5kuBmkdu37TzEpOFHbd46d0xgggGsZh5aU0VY4En6jhWnh5x0fC69Tn1Nmoz+8x6ovL7eUx8tLxBB7PtkOQQ==","shasum":"8b8e0df0682bff730717a8d9be5e561b8510491d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.6.0-test.1569612516542.tgz","fileCount":218,"unpackedSize":218467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjmLtCRA9TVsSAnZWagAAKfEQAJWGwS7RA2kTQIfZ/xDX\nqEfLVaObzXe8IElGIYT3JoFKUo8lzrwzhWyAQ5KkfFeQwStOvxH7l3m6NYjV\nHee2aSEiJ2rO1xdBDBqL2VBFa5HgEUP4JnjfL5QEhoKdpwR/tDHclwMxLMvz\nxe/csaT1KojDHd58GiIbrh1blAY/JlNyZcyNeTPUdhSyBXfXp0Jbe2xRihIU\nrRouA5NOFzSPJRCztpK6n+JAus9BXwwOqn3SfRI1v2fgZDsM4GS8vbjkscbr\nDVGEdMCXnLgA5+fkthtm2xCOpAHSXSkovEofVo1MGDk6ooUkE+hXKWPxe7xu\nabpH0DTypTCyjdgVrLYw7ghNOpdX2/HpFOu6CvFrDBmbviFjmo5UXV06D3oH\nigDjqDdcFpiHrCgTS9UxY8UhzeV44mLcSqP9vAqA6SDox17suF4HgB6jpxMQ\nPbkGwvYdRGNosqzcGL5SkTir4FGFCFXNp1K0NL/8s8GlQwQkNvA9aogczYmp\nYr1pLe/tNhzEJSnEYL3YMpq4HUacLvgNFJTdiPqx7Hat5ZUkls6RRVXM3KJ5\nXzjQMwqSsyHhG50ZFkXm4vEgA0eA1m5vceutNzW5OZkw/zGdRKdphpM/CTOU\nAlVxyHnPegqJMPoxM1icLTjcDOuRp1tH1m3jJIwMUR0TazuNeBmxQRY7hl5g\nJzZC\r\n=ynol\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFSiDZiaB4zv0sAxFLe/5ttUgmULj7W8NM7omX6lqI14AiEA86uB6wpQrHRwedLkFBz6xrlUBUgieJpOvIZWpILlklI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.6.0-test.1569612516542_1569612525176_0.3461504586884179"},"_hasShrinkwrap":false},"4.6.0":{"name":"ts-toolbelt","version":"4.6.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"fae93124012eaa23ef81089fb3d05d7705e3e5c9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.6.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-h7P3eTq/7bMTk03OhB0s9fDrL4dSNYML4+XA43cEO0IQ0vzHImANYpBKS7UxuJJ6zIiMV60rku16fS48zUn+6A==","shasum":"a28253663d7e375cffafb14ae54928f3dd145112","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.6.0.tgz","fileCount":219,"unpackedSize":218448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjmSUCRA9TVsSAnZWagAAAWsQAIbBh2Zp7Q3NeAGbQBb+\n4+DNsZjtssr2QGHnUM74wFqG6cK6C2TDhRHFN8+tEEN2xsx72Czf0lIlSEGg\naUvSWjhbcICI7GnowAYM/ubkEGqZoMzXRzDH6SzE5SOQ/cySjAQ4yC/qxS1J\nnXmF8yC6XAZlT5Y2w4rY5Dh4JFqX4nYMXqvxnAbxcomT+mq5MMUOJUMhEuOi\nNb3+vE2gEPGVe2lvZ3tTkML1514KLP2RtmaaxMf4J9Zh2eRE45i6kb6u8H8G\nl8vdibMEuUKmnPcOJwegVhYBSCjFD08+N1WiCTmq0LC+3ED4Wa0OvYQmss9u\nQRALsrOO62tjxrWFd+f7Jug4X5Bj+j4kNw2p2fRAOJph8XNWttEdoSGsxpGg\nekP8xAa7OKmIS8xX3E6bjPmqzqcb77Xdz0ROX142B6jr5/gOosa/dLzjwFfd\n8I8nOSjVkhGRMM4CU0Cn5lhBBSc20qaOnynsodS9NBnolrhgkixHDykKDYwN\nXuH08l4j7WXKblHuVmyAw6vqKPTUtfEMYtBi+84fqOnxQal5Kq9noyvVIy5l\neNdkJn/Z+MioUuoIZ+tYenOTfqp+oph6q65Ud+2srl0T85vYKekNgHDJBaGn\n/R4ZKxKnNSxwba9nBniyonzbHfpgHQJDYYLgrOESCaQbzJiY8eBPhD4b/r6V\nQal2\r\n=j8c5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeopZy8LeAMtSCUVTn6yxl6Hivf2RdqWRSCT9gnhgcrAIgOPtxGIHuTiUlhZO48vk3DmU/pEuagE65bJ5mXdRZlB0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.6.0_1569612948142_0.8290983053080434"},"_hasShrinkwrap":false},"4.7.0-test.1569614446522":{"name":"ts-toolbelt","version":"4.7.0-test.1569614446522","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d2ead21f87e42200f909c31edbaf8173431951b7","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.0-test.1569614446522","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Rjzc+/WDv0ajzM4pxwLnptrfKh6xEhAEzb3h3ZUlmwDzFugOCgvpyyV2d3wgxH2Uce3Cy3ZHkyGX7EePgoIpMA==","shasum":"de812283445088defd18c72ef9acdfdcb548ce98","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.0-test.1569614446522.tgz","fileCount":219,"unpackedSize":218954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjmqFCRA9TVsSAnZWagAAb88P/jibOkdNpYzi9w0XLFTq\nHFuHKDkRj4syupQwl4TQ2wxqMr+7AGyJIi+yPCrHd53UysYtKARr22C7wn87\n7zKIeZc4gcpOwrZy17zYDI6giTA4GEAHPsKShXN/UVbFarSkWk68tUoamSp8\npAI2PJi1WziT4urxgJ61saEkW73HUJvo2D1ENqiQQX8+QUReTQqDSk35ZGXr\n2nNy9WYWMj7R/Qp5lB2Y0eN3Y6DDw0oYiTdWI09aRjZHiFkFiGGC7d9v3kAX\nPrUxsLXovPVjCrUJ5fGEBllgJ+MFVUKurDN3wAPSkM5ylQEvADJ+fYg8rS20\njxT4Cv6LwydjYIVqmHCAjPKnlYz8MhOYbqx4aIAGxHmULuUC2bD7hDukjbSF\nERvrKLcT+Qm1ENle9YpXO31/1P5GKTSaXWLw0g0Y+T2KKoPB+hS63a/GQK4G\nKShjQFJi+eupE1fS/peDgmeHUk6QzxIZQ3MPLe/vyCD1Ye30HCFwCwCw+AXy\nOQPtYhllbB2cgIojIScRrqiwgWuvp87MFNuULDFoPgXYl1WRvSc6CjSlgiQz\nVkLR5dFPvWknrBr9bBvi65WYXwGcf+rC2hUW51zY2HUEcbEwUM3S280SHA1U\nBW0xrHYx9h4DCTL3XKGtQS/zwDxITb1aP+C9gAb4VHuGFUMYlZJhP9HJyAW5\nnNlg\r\n=zDmP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD40xFdm8BqkAbmxdWOuY/hEGeQ5sVMMZLA94Td6vmn/QIhAMnu6kVgxbQkIyPjXnqG64yWzDBuHVqik2LFH9wTdcIg"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.0-test.1569614446522_1569614468196_0.21478077638376858"},"_hasShrinkwrap":false},"4.7.0":{"name":"ts-toolbelt","version":"4.7.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d2ead21f87e42200f909c31edbaf8173431951b7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-31vWn9qV7yyWQ9367k/YfwI+Clt3iJaMGI8IeN65pImhxdgj2MpwwuKaT/vy9NaGysoHpk76mo+FqB6Cp/QzPA==","shasum":"2523b6ffe1a97a5adc73235dfa77e27b129b22b7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.0.tgz","fileCount":220,"unpackedSize":218935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjmt8CRA9TVsSAnZWagAA9pAP/jiNraRNXw6h42VXjGOi\nEvOvl6dUSBlD7kcWb5sJtbZ4siYjlFkVCnRrvLLLYfzSxD0gyAagxl9x7eTk\nY2CiKQFZNI4g/XGb5mRXfhrSwymVffT5BmqUSN7J075Dm7yoMXKo5SSXkQDI\nvU7ypSO+PsnMGA2G3E1PVz86tDqcZSBhsH+EFvl0x/NgkllaAbeRUj8Z5HI3\nwymJqULK6UkzUWSvC1tKZao3EHBsm61an5I+GT5Cn9lqpWKdkS2Z7VqjNz+u\nR3RI+ENFrkpCZPkgWEMnNu1ozIZletsnlRaem3ipc0jjrSDwFvU9OVP7P2kj\nB57brnfxKMI8opZQxXoiFUF/PDD/ImCmYyjbieBlKXI0zuKleOkzxqf+JCOj\nkixjA8hdYtwPCNoLYrD0ZSkFgGjYvnDjXVCnyj3UZpwB6OuWO331C9+Y3Kxj\nUz6Ta04UpNnR+Bp3/vNLkRoZYkKLNAWRZTCAZ1hAxF65knopRV7kWmIxAbZ6\nhftSIMsxe3u557fiwJEDyiaR7E1JHt0oFY8PHhFiQEBeTIY+B5zv8kgGSuWO\nhRVKZWHGDnX53U0LugsY65lBHEXCf3+TFaBrlmEAxuKh4Cu1oRMWYTkrQqpq\n6FC0Btrlx9qwp7Zny9QEtw/N8YEFOk8HXq2HuVKkR+NDs4S9wZqN2nEXuiVs\nuV4G\r\n=gJCZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW1A6atcuYL+0QxiNAf+39InzXKnfTUmZdJgelNC5PXgIgcAkKGHb/eA5WlabdkRkdmSkp7uZ6Lx08LIQR5tWgsaI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.0_1569614716027_0.5181337298773789"},"_hasShrinkwrap":false},"4.7.1-test.1569616930845":{"name":"ts-toolbelt","version":"4.7.1-test.1569616930845","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3b909f027a1df32743745515f23312f99455de1c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.1-test.1569616930845","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-82y7WbtzhiMhPkT7k/55j9t4cpsFD+wtWXV9uxcvPCv/PQ9bI1pfbMk/Crh/lnVBgx/tLAFRIAsY5dwzWCkMxg==","shasum":"e31eeb9fc195b9faf313b845f8dc4fd642dc1387","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.1-test.1569616930845.tgz","fileCount":219,"unpackedSize":219181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjnQsCRA9TVsSAnZWagAAG88P/19K9hlVtHPQW0EWyK1F\nM0YYEYyLPjFxlvBNLrFiQrV173JeOzJQytg+b9tZ24B2kkkcNngUJXfa7bHR\ntYCEe9j8aQ/TltcI4Y3+g6YadR4CrIi647wiIKg1dKMfI8VHV9OylM4/9UYJ\nz47vjLuk4UfEny8/epO4edKEfEL7jPQRykCRNcA8cA+lRj784nDMvk7ikXbK\nnRxZTi/LCq6IEZQ4prPYdpt3PAp1OyjPuXrydJ+7hFQgIbVMFiwjyarI7FQN\n67RAvf4FUIw1NwHxvVwxKRykAD74AEa8xUXfzvojKpohAtzJI/AH/wtNGlCh\ncu8FQSxlLzLf/wtZQzE+DyZK42YWmwe3eyAlsXwXNabOLBZUzI0ihM5TZwK8\nhDA9byMAMCDRaJHaWVnTnjz7CYodB4zj9zzfzFGN2addcf5PraL26Gbgsgku\nd7SsvuT0ftNTtDXHxe+po8oStAbwJdtXSBIL/KeG9CtXppF3zYf62kGp2Z4z\naR5nyuagGismeaVMpBIZWltQd3gs3Wb7xjwGB59+mjOpqC6d8hcaYVMjhY+K\nbp+irMgaS9WKkQrY3JHbKjG5yhaAwdJwT1dBOQlJMq2TcLhfW/OvVWZHrUBF\n02Bq1EFG3oISFp+kt7B1caLK5QTfB/Fxl20pXy+8WinUzlM/erI2Dio96LNe\nW45n\r\n=U2QY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgfX4GCAu5u9BcxhvyzYXOf3whEI+EC9eq1E4AnomgjQIgb/0o8utt6mGLo/8XVNzJuJftaIVkpWwbV9TWW5GtO0M="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.1-test.1569616930845_1569616939426_0.09748838782031011"},"_hasShrinkwrap":false},"4.7.1":{"name":"ts-toolbelt","version":"4.7.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3b909f027a1df32743745515f23312f99455de1c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-QiEvysd0a+ODdlb49/S1EvwVfKUW0ozXetzhP0WvuEjxirnajl/FQeubm59uiFjMWNfK/EEQTSzLqhMS0PVApA==","shasum":"efc6d231a9b476d72b6b149b3092a4206a4703d3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.1.tgz","fileCount":220,"unpackedSize":219162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjnUdCRA9TVsSAnZWagAA9NAQAI2njvTp4tTc4UmxILnw\nPfBrn/IarHgnOsQ67kO5toJhrqUEDCblJEauRUvgyFvM6gzp5eKZNDKmjWF+\nBYEHXUiUB7itlKXc1Uer2wu6sgU8luiUk2KvbeL+F0qVQrPKfu/IXfSaWs1s\n5aC2yvx3ke+MntdFVE5Ke+eyUKaXhDXwolkcwC/+GWKeM9DRdC7wH5mI3nQ8\nqKhecdoQGJ7idE4oyNXFcJG4J8F/2a9ZKL01KmZZANrDOMK15UlB9yLjBmYS\nrV8vuB3AjU6xgp957/g8kTxG3xRpY8T7hORnuL5wH1q16WJGUxg9tFT3APVf\n7NQfnwP4QKeR7kj82FZ8R6uocEDSYbkfV6ZSBmLxLUtmbDn6gE/IrNkJljCU\nDkQMXmzEYom6GH7m1ssyn1oYSeIQmsMk453aN36GCDF1FIBHjpjPMFE1V2aj\nKTspcsABUprh2fuPteEL6N4NgOv25bvLqLsyErmOgA2sCLxEuUx2qAf2jAbV\nC1GsQlBBu8cfpyliUHNLvytCm5TJBV792X8N2wbEtiYj1LTaa3ry537nkn86\ngE7Sl5wP+X264QvPDt/FIDEUiEmvgidtALxqMhkwi/H9tSXPF/BnO+2Bpkyu\nDUfYw4d7ana/vNBsME5Gl87irIEQZEygZZfxkBWM2K8ibjSrV6oSns1pWE8n\n+luH\r\n=kSjd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkXCr7mYZTHl4eAY/0rM6dDZfP+NmTPaDeV1uIKAPp/gIgJiMF+k9S1bI2Oly8LG4cia1II7U+3I7iooD8+WpKfug="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.1_1569617180779_0.5299849195338344"},"_hasShrinkwrap":false},"4.7.2-test.1569630739737":{"name":"ts-toolbelt","version":"4.7.2-test.1569630739737","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"c34bca7b04ac22bc865d190b71676443c7ccaa28","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.2-test.1569630739737","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0OA3dvWo9fH0gQwooF74msklCWbOJQEXp7eq05zSlwnprGUXqOL8D/3V9kb3dtTvWXfPdHtBkw19s8MRbFCxYA==","shasum":"6440c87bc1e5bb65b8d86a2de0bf67dc6c906f16","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.2-test.1569630739737.tgz","fileCount":219,"unpackedSize":220016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjqoeCRA9TVsSAnZWagAAHwAP/juHvpxoj89nBYSVAVsA\nJX0u87+LiCR48b2pvn34f1K1pclvllyRH5l3rwSEBd4RNbBhyxEt5iRjpBZI\nthVlEhbRmADp+0uNMn37qv1+2Ap79H+FD+6KH/0aF6X9oLkcwva6x8BUQqF0\n78oQ8mkWBm7LHxoRiSe3183kTd4JN08egOQdDsh9wPwGbtEwYUz/ZNENu/26\nJWXDufLQX6fCP7vBHs9eO6//QbJ9AN7tikhOiYvGHkw8C29NfLQ9NDVuqQxY\nf7cbYhA7hZqBUsGF/b+dLaH+f/MUwYxtXpSFVjHrAEjA6dVjaS+oQ3YJpiuJ\nNwjtRnSOyQIBF8Gf/jrMwk+BopUx7YOUd+54sHTr+GNHFE2hz3gxrSQoVuRN\ngmUiQpuGN0b1sobfXKZP40oKo+mw/tQLrCDr2N6vtWHYwhJF9oel7U0dWVVh\nQnnlm/DC6e42f2/Z4V07AOvtNI6uMZZu1/ccAHk6jwCZirbnLZ5JCey/x10j\nG2RKomvhaNibr7HipvbczJ09pTWrMBb33CeXdx/eEHQM0RBS9JZswDdWZ0FW\nyXWK6Ekf7ah11oUc2Trc+mhYZiiZ0LEOeahogh6ZZCBtMQLJWLHXCQzc24Bc\nLMxLlqs1r4isDN9FnkfN+5b55qqJ2cKhd+Oo3uvNZ63o0i7CJJoF9eBwdoUC\nOpwH\r\n=WUdl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDaLcXpQtAakjqDPtyFeitIwX/MmMQbd1iElN7hg5EtgAiEA0NoHsBRaldrOo/viWYnhF6vJdF0JAYz1HatdFy6SQ8w="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.2-test.1569630739737_1569630749312_0.3821479890368642"},"_hasShrinkwrap":false},"4.7.2":{"name":"ts-toolbelt","version":"4.7.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"c34bca7b04ac22bc865d190b71676443c7ccaa28","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-kOVv9y5wd7e+ew742pG3LkFP5KfYtKjJI/34p07bo2lahDwlM40B6ayKKjr3klVJeJ3RXhKvtk+Zin1oIutUEQ==","shasum":"fb8d0163144d4898ed29958f4a59d50aaa40bed8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.2.tgz","fileCount":220,"unpackedSize":219997,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjqsOCRA9TVsSAnZWagAAUFcP/iJk0AoJs9zNwKp4visJ\nJrP9AGJwf4TImcm7cFFgR8SHAq4bhDdwyQYrG3MbuSyYOM5Vme6bsGEEYYWs\nzDXXW9NtJgQPBLASZn3NBoTaNHYAYN9nFtNVWA+/ccNXm1kS32ilvUhIZ/GI\nvd4414GPT2WP2dYgQOEHYfiNu9hF0yKdVdfJJZ+4+YAsVaf6Th9tQQuIyhQQ\n+6JLslrDbB1Brcg+vlThb8NTrRMQgDqhNXchAVS7GlaYDSyPUuOJLjfPq6QT\nOpLSSoSCqG+k2R175fqXPcWOokmi/nhd17T7+Frbug+cGuZeRtXfTGScmoJF\niE7horBf24KoZtOYd3TkLlXjwrtGILIaEdkIUIS9PwA+33ZoMalWOxPJpYtb\nlguQp1aLJ16YqxN03Q22VmSAmyCsPuYtP7GbiEiRYtXVO6Ph+gephIu/pOcX\nbNt26mOSL2ZnejK7uNCXWpgoT7K//FDKVoiUsugHVRYnDAjLYuEl+Z85ruwn\nku62+z65XibftpEegGvIyKyhThE9pJ7XxN0SDuzYHq9Sl+bN2Z6KhQj0ZUlL\nqGEAP0c/mM2/Nyp0xQRBXTdK0/LNCjVkFYLWGytUuH+JPja66bh7cMP9+egd\nN/9oCWUGhIVE1xNWWLptZJUCtlAR13GdWPFIzC08fmT6zmBPSvO08c0p+mNe\nBL48\r\n=Ksay\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxx/Z3mMtlEZ17XdUexUrvQhbqGRrVdglPJ2XqasbvLgIhALkswe3M99x9okPjv4WA0hhf1UExt9ZhnMLnukJZypcZ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.2_1569630990122_0.4950265595313441"},"_hasShrinkwrap":false},"4.7.3-test.1569632889663":{"name":"ts-toolbelt","version":"4.7.3-test.1569632889663","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e6d21e67ff648ff05ac974e6cab8934542454f25","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.3-test.1569632889663","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+drAPfjeAfvtyJ6Nn32cWTkLj0tznYhAWRpIXFVAtFfjswKvtU6l0XAwOiNaeiaJZN1FjFu4Q+iPQvIelQACJQ==","shasum":"548600c8ea13f7b4ccd60fec4348294e160b9052","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.3-test.1569632889663.tgz","fileCount":219,"unpackedSize":220417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjrKDCRA9TVsSAnZWagAA08cP/iTFc94w24KDndQs05Sx\nA77ImWG7bzejc9ula1jDVZSwkU3PGiRO05a+UsGoWxhW2UDFx+7XDU3MqJne\nY/imWczTCTMnHgkCKecC6QpUJpViGdLm0nRWs5T1+5tOJMPOffNLfwlge29x\na5KSVJ59YH76nUF4HrfllnX9LpQCEr+OKzeBv7PjryBInTacThCFc8RTziBv\nqv0y/Al/o/W8dd2a+f0+rdnSM8eLM3povyB9xhd0ZWAUAB6iRnJZVebl3f5E\nXOd045wwWAIGMqiRUppE+lC/hnOeCMIay/BMsleWuLb5KejDrdYXrSw3AnXw\nz2Mo5r/aQyT9M4omGYF2jjpZK7HI3lzEzxEZdsaxMFGDvmLcv5ZULnZi6lyq\neRg2Zax0bXZ/4tIBLbEail0wKdUdlRs3++/YB0ijhiYM5nmQNY0eoYVlCMyR\niR5ejq57CC674agAJX6uv2bhFzk1Ra3OZmbZRe/jOdNyDXybPdnvyoNRg6ka\n1BWqbg+4IT/hnt6YZ13jPaq07bLUOaJgG4azrEAwuajYcxSzTKuadJ8b4OUx\ns8lVHHj5vghRv/iIw/hPj4ZSLrvtt1udMeOvrlyK0ciaa+QcGcKM75NUYzF8\n7rgjobYcc/ieOn7JCxJiFOYH9UB9pG6OU4EMwmfZEYRbALkV1tOoSiysmR0u\n34EH\r\n=oZ+g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBoadKnbY06InCONF7IqwFuAHcKlui5caJkkUoz8xp5wIgTbEr9Fd47c6Dl835yazmFG3cO1ple4SzY6E8PSEMYJI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.3-test.1569632889663_1569632898129_0.6753478118369158"},"_hasShrinkwrap":false},"4.7.3":{"name":"ts-toolbelt","version":"4.7.3","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e6d21e67ff648ff05ac974e6cab8934542454f25","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-8g3wLaj9sF0BcXo6hVPn8RnDyq2d9iZ9bVB1c4f+2z16J24Y9V8adDZ5GaO0IUKsx2Ouo58xRTsAu40Lwvbo7g==","shasum":"8582e137a598a0369f01c8ad8b89052e5666c828","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.3.tgz","fileCount":220,"unpackedSize":220398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjrNyCRA9TVsSAnZWagAAvoYP/27EPEM1qGBJAnLcTDCA\nN/wi6fWD9ZvnIsY8pBZ7EkptpDewTiEwwpnIKz59YgY7vNAR7vLX3luIhdRJ\nM9Gd/4U40a8poTvoXzsaTti3MT8xc/BsArOug7R0URYI/8dPw8XE5cyLE3xE\nFxwmYxSlsk4MjeCPTrWB1UfUC0tkZV9mcpZVvg63gX9D/BdZg7hCUUat2KCe\nwjOT58k17xpsc9BoXaOKjFun6BTPF0/5eB4m/tp/SDIg6oO0nO9AT3/n1DWE\nKsBeJXHiOzpjSxA0Y14y7FhFyfU5IQMYmohtT0KzXA6TjlANO/6TyIfPxxDb\n3U8iqoxrmb+qykpT6Dh55gFttuVdqMTCgj4l4QjgDlsBXij6aH4Sa5+qLM9a\nnOodzI1zKwfcua6vm9tcSWfuSRZLcjnnzT/ixOOjjV76jykTf8c/XgVGEHcj\nXSe+89O3Jg3m7QKJFDFdWLEUmCizEOsv+WgDJk/IlCBUYAb9ZqIrjYX4CGhM\nKOYSPdNuNl5m2pNQyG0bBJ5ymcUcO7C/CmPR/ySkGG6Zs0NCfJdYNXOTOVeP\nBnIQxrDB+RbU/fSiSWkWNDUNHBh/X4Q0cKKQcu4FB1RY0RLgoLu9P9VeypLu\nSBiDXZnfNiVSMLr8CFj6qqwURFBqdO1A8nT7C36chHLy4hj+OTaxkmoPHtiL\nWqq4\r\n=ZDx3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQbR5ele3KFP8RglIfDhSC6IBDfvypZ2qN5muLgyZtDQIgP4imjdv01O8Jv1J5kQ0Pm1kaTJWSoePuP0sfdO2VkV0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.3_1569633137293_0.3924730012470812"},"_hasShrinkwrap":false},"4.7.4-test.1569674267602":{"name":"ts-toolbelt","version":"4.7.4-test.1569674267602","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"8c2228769dc0a6b461f483e312e5682b8ab5d935","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.4-test.1569674267602","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-CXzYXQnAqD9cz+oxqb8FDj8dNk+EeijHW48Y+7F/552CS1KBNHGNvfIXM+y58R5A47UJtTsSrKGVL9Yxb4vueQ==","shasum":"dcd12c5900b54195be3bd13f5601f26030c3ae72","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.4-test.1569674267602.tgz","fileCount":219,"unpackedSize":220608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj1QyCRA9TVsSAnZWagAAqFAP/1khHU7OM0xFxfRaggsU\nlv9+bWuKR7vXIMV1ZczPnd7NU9Zz+F/0N81cL3OGQyZjJANRDmYRpkeo8tZT\nGefWE8IrWqq/b6NQlu2Nh0ZN7eLqeMDgxjHCZlB8SAXSPPsiYvL/t2YcP01k\nihomECfoLZnwLZkX2KSWOGuPEf6sbXHyCXIYirMOH9gGLj2okENna7kF1v02\nH7zijCkj51vQFQFQGL4f9BFPH0iwJP9SJGpsfy4TZSlUO32I6jMIr9vo+Fbt\nsKKrD95SDml0Sflp3VtZU9aIaAmfSxbFBx/YAmptJUjjBusvIuy0t3TkmKVg\nAX0VP+gofFXBL5KO7eGwi5ZkjiNn+es4FoPI9k/Ukz9T9t3BeIUZdk00KTcB\nzP2hcriBcITgM3qQNcQwsP+f3chT79zohqlCJrlM1JlNVP+0DTPhuFI+WoFL\nxS7ffpbJ2Lsezr4f1QWSbdiMUwOXpZN3mVdc9LrfWcLteCwQBFb83hf4QGQH\nrLT2i6yT9zUw4jOWdZpRruvKFtdx4s7ZMYevdlheG2aREhJPoUtaG9b8Ye5R\n2iZS5dAHwwgOGnvH3Obj9bClqwHpTtd9if3pdlNfrdsxuIMqq995sOv0mUYw\nne9q0sPTvk6ft7eSOX2uB8hBjAcjTK4d5sB50rbMGZk1YUOKS6OQ9TR9U8CZ\nw/EI\r\n=NXXE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBAMHQyEI7SnvL29KHvxTqpFzGP92g1hXElvYo5TQ3t7AiAriFwD8Q3KQudRA3QjBB6MLXnubCqZhcdChlYRVYbHLw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.4-test.1569674267602_1569674290204_0.2610531073543616"},"_hasShrinkwrap":false},"4.7.5-test.1569674884964":{"name":"ts-toolbelt","version":"4.7.5-test.1569674884964","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"7c1e049a1bf400a63b64548e1ece90dff08924de","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    Get Professional Support\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.5-test.1569674884964","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-nwpKDJd/2KLexFxKCqRo9Z0XbYvF71K9eiuzYr5jsBpFsRgWpzJIr7vYvKJTFJKHE+OKDPS36CNeTZekFNoZMA==","shasum":"7d673dc2bab0f5edcb001f5660ea69e584372ae6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.5-test.1569674884964.tgz","fileCount":219,"unpackedSize":220799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj1aOCRA9TVsSAnZWagAA1PgP/2HhKPeSCK0vA3wQi4J3\nXP3xmULKcfwNNxForr3Imr3WCCPsV1fVB6bLNmfVqun/g+JSyPEbCV8EXoBj\ngfc5ZTb0GOms34L6TupAhZO8jp0Tt6d5im0jQSKNsC/RFvyPyvMDv+JNH22/\nV+YicaHE9zNlwoVDedUsbdDaM0FpSE33yuVNRQdWVFrnXWq73D+DVBbpEdBC\nyhBegrgjRJpGDpypoE4vrT698wT/RUWb96UQAopvUFr/QCaFq+FJkZQGcl20\nGC3/qIkLUFpfHaZ9IVApJyhNhmMbUs3w+oLl+um2xo0cd2jpnO9n3E6Szh4Q\nvd0TYjCgGR2hxM4TPx9gudaVQgnuZVsQ7vZA1X7bIRsFGtl7gftqM0ngf4RN\nt4mVqAAtmJA3jx8IFR+JiuGFGe7ep5J0tpPpO9M+5acfwvLgak8Vj7OB9YGW\naieXLzKT41ZHoMvArENzj8IVcyvSIwOI2qCHXghl5Y2ZowPvtLTYPsG585pC\nUOvBm0nXy5ATwKw7IOXtIWBs3DxV9Kexl0kYaPutUI2VHlKzZxQLYXzr5E+g\n8W1lIsX1t8NjqodSA5Wcpi6W7FRCsTFfvmfRLWn3gjrRnUin/sqwT0GyHHAN\nD6g2APHVpIgeHR1D5bGpNRvfh6xP8OZNfXyCxIU7HzR0u2VQTgDc980VtaRp\nKWlB\r\n=pcSl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEja8QxjnrFLGSfKfgiHIuUwLPADnDihRcrb5J0xc4MAiB8BnsYeqjiPeZ5A7db26UHvem9jzrgXH+IgNq2Y4pzrA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.5-test.1569674884964_1569674893542_0.3328690967780956"},"_hasShrinkwrap":false},"4.7.6-test.1569675048187":{"name":"ts-toolbelt","version":"4.7.6-test.1569675048187","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"ff467cd3adf7fbb152462a7a339e1dcd86e0981a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" width=\"250px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.6-test.1569675048187","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SIGQYDMvhPu7m+MQzHKSvW6rDo3OfDgqPBo6G5CGTBQtsuENYaCyvPyBPeia+ZXS4j9s68cCMcmy84BuMYsx1w==","shasum":"62124b65b155b62241387aac41d99812f11182ac","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.6-test.1569675048187.tgz","fileCount":219,"unpackedSize":221074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj1cxCRA9TVsSAnZWagAAjeUP/3qSyVybihHHI7SwHiOM\nGT3YGjsywQ6C2wVTNdbSIFm1RDhpq5pzKpJYabyat+993VSc2E3rsXQGIh3j\n13YDVnNz5p8/6pfbVXEUQG1DZrdMl8MNFmn0UAYEfk0ZiK7HPgYzB+AXQGyq\n0JEEe7jiulRIvSRPMSHBxFNxYzh1rbzuwx5mdbTYKdjCp4dQScld+7mLDpJW\nEmapM9cD60kJLuKnz+kdHyI1WmzizBgo1QJW35eTnyXSjeNS1Jk9HG9doWsI\nedrydIclizwBQalp0wJQbQ/yDVRcXDRUUXLWHQrEI2S5Z6cqFnoUjFMKxw/0\nrqs6DIrJEIuGoxVdwuUlv9KCJerNEpmbvnswwQ/ohs8cgGS/fO4bhgZlnSO3\nIo2TeodsoCPiB9jhD3qhRdF0pnz8Mv3k89UmBjS4ElC2bURIZZxaOQLkeFxu\nI9PERWnDVzvShogZgwrd48RFo40kkk0s94MloRdHymKW7fBkd/VKn+grqedz\n0nN4J4pzlGj7SJSIDELCIzx1p7H+QFewask5zRt0q7IjY7EPnOBvWZ7hVaPk\nfwhoEL/livAUd62nPRf7PeRMbvfow+NQfAvBgG1ArviQYMGliynPxhfVg+En\nkox6XV4ViMNzCHF/cdY0vttU0jQ9CElU4XIfpDLkLUav6UWadFzN75YKa3qe\n69tM\r\n=4bHr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHS4LNJjOqPVa/TlYDD7lVaV78or4gWtrKb+iq5w4f+gAiEAqbzJ2mVJyzjW0UF9W4mrxkKCuBFbv/Uf0PpxLY9uIqc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.6-test.1569675048187_1569675056804_0.5384748855680055"},"_hasShrinkwrap":false},"4.7.7-test.1569677238038":{"name":"ts-toolbelt","version":"4.7.7-test.1569677238038","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3dd76e9fa3db6cfcd89bf9e16b654e2b5f0f08a5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" width=\"250px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.7-test.1569677238038","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-JBSvJC/DC4/L5lVHGBEeqIpEsNMeAVL8C7kK2Dwj3ZY6gjLAqWZYoP5+7pD9AtetzSxw3vhAhieHLy9qKck9FA==","shasum":"883ec5f0b9fa784b90dd7ff17ea5129761a52852","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.7-test.1569677238038.tgz","fileCount":219,"unpackedSize":221286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj1++CRA9TVsSAnZWagAAPCIP/2gHgKgUfWWmUwKGdnQ6\najZy0eUI9IXIuizkH2+GTBMcR/XrtJJ1d8htR+zmd/RCioRS2QV0hQDX+OMZ\nnrc++n2D47mcla0RKrIZrrqzQZ+KMOUD+DgmD/1ZuvSnX9b/HfpShp9+e/rR\nuX+ZcvFfKnEEcEXqttNWZOEpyu/9n8AzOuJ7/H9OxMc3G/dOD5blF8lV9saU\ngL9AM47Mp0hdCXEzn5JRhLXhjWUfbcrAj6uK+cmA7F6RfrNaFb3E6dpyFJHA\nsHrgNwnkl2msWRkcNED0MSaiR7AiVzE0dSQgRmlXmQPif2CRQJGgv/10MNRw\ncTyH6XFEcj/QKqGPnrTZqo+lgEhpLOS+07WjMZfyzFlSSCJJ6g3LA+ufJBXF\nXwBykeYo9KAHA5dfYldrcJGnC0ok7Ui5j3Mk8JA5GUBIrYPH+hPg6isrtmaG\nFkAW37Az184fA3xB7GFos3+toLLymLBQkvp8JZEwAFxL4OnW53qwriual1Tf\nIWs+iP5MZ+7IfWKdCxlWUO9fqT7AM85fHTHLwIkV/Mdr3YvysynDiuC/Jngu\ndQsF7DxTriWEh3dGHY8zW/OddHUJnby7zL1uXPtO6YzhFRBGnWLzdiJue9pJ\nd87ClEOkoFcoD+5UovMawtQm0+bWQwGffGScWPfdr9WkE1FP3fi7uZIT9sRG\n65FA\r\n=MtTv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwl/qWz0ykvKUk4m5TQp9WnxVupYVcATNB3FMAD6ulbQIgDm1lEEzVTbrgehozY0GxF5yaiB0iyd61LSp0zvGBUkc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.7-test.1569677238038_1569677245904_0.2175318436531959"},"_hasShrinkwrap":false},"4.7.7":{"name":"ts-toolbelt","version":"4.7.7","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3dd76e9fa3db6cfcd89bf9e16b654e2b5f0f08a5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Yabbe3uwLTmEoClW9CdKO1Aa9fYaIJIVPqRj4OCHZ4iaMKgHl3c0Ncyblw9R4C1PKmJVSVFeGRIMAktLE9tDoQ==","shasum":"5dcd71ef380fb7c7effff7abc3eedd6e72c70dca","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.7.tgz","fileCount":220,"unpackedSize":221267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj2C1CRA9TVsSAnZWagAAmJkP/3p2s5MhsVWASdWSH5bb\n3y5hm8UbKL/1sBTaArzlobVT26Az0xxFN69ewSfa5A2oomUeqgwJUxyZ5vgl\nuBAs3CTYL8x5G49NI24pXM6CDTnYBr8eJEx+O9YJKOttsf7AMuBFrtWDNoKk\n7n2jOZZ+Rj3/ziSy33yh79LjiKnml+S1sVz+yx9QUGzNmtBGnhN9Q6UgK9T4\n9nUnKuas8R22C6f9/9VaxbZ8yeD792/rM1NGZUW2B/H0Takp6giK8z5xspBY\nUMb7PNEEKAedJt4kg4roHGjKNGTA4hh/8IPz2PFPFzNYiv5iHHc2Gwq10Tru\ngfkQEsmKl3eYN+m+6/R1fBJM2z3f2XzuADVrm7USrRD2UNErjRO9T5NxYFoQ\nHi5arE6D/PHH4+GfubRnkXRTxvCVSo2XLbbx9MpQMo/pdM8W4S6wlzR1aPta\ns8rqqDf/XJQMNcvlI74EiPBaY9gDluWbx0Zd//aHYBnOifCYW4M4ZNHKHjtg\nOXkMXJTAWHJ++xJBT8hYmXn4P185OYV///9+raij2TqLNrFz11AvWqQ0uW5q\n+KpcyxTEM+PKjm8pq3TrXcA6IWZNDOjDY/Ynq8n/qi7QWJaQ1yKINKR2nUdY\nv/Ww6ZuSUFqbR0s5kQun2g0mVqP1hXSIRnpiMPYJsvee7+kBV3eU5jKuJtI5\nzcuj\r\n=82Nl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsZ97f5a/OdeiLMmmhQkZtvrWpIQrEFbUfJgJxrk3UKAIgGSFtlBvfDlujQiVML/p8bel0UmuYfX+w/4haiyr/IMc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.7_1569677493215_0.7327200831661951"},"_hasShrinkwrap":false},"4.7.8-test.1569679083686":{"name":"ts-toolbelt","version":"4.7.8-test.1569679083686","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"cfc03f0f3a69ae2b83418cdb906ee697bae7e039","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" width=\"250px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.8-test.1569679083686","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0nd2txiyUmzZCfuFyYP0G/9a6wYmMDZs8kis7P1LC5XK4urL280kqP//nD3/QCjn68x8rG8MzMXf9u+IEjk0fQ==","shasum":"0a3f612e041d052b908034a07a079c77e37d85be","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.8-test.1569679083686.tgz","fileCount":219,"unpackedSize":221475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj2b0CRA9TVsSAnZWagAAcb8P/0OjSy1kUdqH4P/ImbnJ\ncwm9J6zE5IQ29nf3LinCbnxUXjGnrAgDdS1tkRSg8sz8YEDJ2p8iNQ0csqTs\nvbINfO6g7QaiF3ZzQpvx3Y1AtQGvYydgD79Qj3QxmmQIGqI0fd0qSWqSAdSz\nZjRs8Ey7lpjQzRA3mTLaWOQFMLgGlRLsGoPods9hTR16Cz+rvwRDJGD4O6KI\nCsLkX8+h33lpQ9TMwVLcIR3MJTiXfc9hO+Nmhi4MnJ8gu+aGi+QqdoiK6Vn9\nvxCY6m1IkEjeu31Uk6NtFB1DL52kLEwqn0dVEwYlFz49FB3BMDo5dSbQUDA3\ngyF0iUd3IcUs3IkL+LvPSAL/N7dOhXBh7Z2wT6bZ53Z+vqwF0xtSskOMNT5A\nwlABiVBYBgWdKkYshBgbesnZT9mIH1oNBnGhktXVX6+LFk8MBhBn8EO2KCA/\ndwWLNmFdDAgaJP0a9BLBBRJ33U7FXZJWvgNrvmDxkRrM+ixNdTFnebG5hFLt\nppSeC+JOVzdgwnqj6wB9XeKRgJTjY16A+TZLuczFQNIDycIZifZdiJpvtREP\nBMQcA4HXz3kmAzPPAySjWEOlZj4ezY5KTIZN4HWWPhAT/cAyV7TomFLLPM0d\na4sb5FGLBhAujP/Li+RxH2oWIUx1e9wGPVOOU/kKumVx8TwlZQCW8Vrmbhn9\nuz06\r\n=GaZs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCB8CX7KGMLcWAd1XtmEte2jiuqQRj8oljR0v1ANk/9UQIhAJ6Sa39g3t49LOqrsMkU++qzMgYCfc8LRMQd9yr9mgF+"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.8-test.1569679083686_1569679091483_0.29598394680641804"},"_hasShrinkwrap":false},"4.7.8":{"name":"ts-toolbelt","version":"4.7.8","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"cfc03f0f3a69ae2b83418cdb906ee697bae7e039","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.8","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Pu13GcqKibFiehZehACVDzr3zmyd8qn5rsdNBImKsm/+9AgAnTHc4boEqBQ2WI4eQz/tRA6jqyVgLaFCuYB1Og==","shasum":"34a505c31f11094e388aba4f59bd2fcb62bdab0d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.8.tgz","fileCount":220,"unpackedSize":221456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj2foCRA9TVsSAnZWagAAmJsP/ikl00gFJ1kTxpWys13n\nGJwmUsJNEQqJQD1eTNUCV18PLY7sMK//egMmweqtUnpTDdyuBbkAFYyl5RlS\nCuIywccMteDwgzruFvBjvBBufznqZAhtwL+a84WYSNBAA+FptxW2Z8B0JdLs\nqGbuX5eE+Pg097U3wPljhmpDXjZ5wc8lJ7jAlwezVM9ZMkLyQ0L4GQrLJKSB\n9H5aCmfbolk2sQHNZ2mC9wlON/D9Aun4VFccpbtfjA7jTIt7EIKDuwutR3va\naPu9lO6PZo950UexF/UFL4rskY7G86/beaVSdEncVIf078rUYcWsKzXynaGD\noUSd9yFuSXt2jcKmJ4t6cJdvcDsx1yOTuhXhiNWnTEaLVWAejhPePiYwz0Ll\naLRC6T6n8/SRUkIVTu8mBLSo5mf4BQA158n2Ue3FzCrcg6I+bRdgjrCuloNn\nNhR7qTeZVSpHpAxGtQPRXQ4kezV+6dYQDUg60vQ3avv653JUmXkFYZatHYxq\nWG46Rgo12brO6euOh0iIJnWl9zpm7zd/VdsTC7xMihh4xYNH4hzoyM3laJTU\nMk3iDhxSpxMKi+zwPJo8WWLIP5bDEvMjX2wEE18ZJfkgZoZOlVxdXijSR370\nKmkWwUDZiuAf6o/2gXgl5hy9N6IkSLp89uOyiJh0Ju0/h09/TRiiLnKia6sG\n2ZQz\r\n=HEa9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgKahNtHZZY5UFXIYa/WESW4clT/5WEY5IUTF92mNUAAiEAj84wfcrIBdj308QqqShyxan/lhQUJFmgsNJT2qr/FpU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.8_1569679335416_0.06843717608856248"},"_hasShrinkwrap":false},"4.7.9-test.1569680282222":{"name":"ts-toolbelt","version":"4.7.9-test.1569680282222","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f039b55af0f2f3e4b4cf225af94af46fac9985db","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" width=\"250px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nHere you can find the documentation for each specific version.\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.9-test.1569680282222","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uSBtlZ9A+SJBVD5a7GkbRphicNgCntvjj8cidSf8KuDp9sHJhvn7qUzlx8XAf7OA+OIg5cCZggTjqvHaSD/uUg==","shasum":"83307df4ae6d0f71a23ebcfef1c56894f45e41ea","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.9-test.1569680282222.tgz","fileCount":219,"unpackedSize":221806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj2ujCRA9TVsSAnZWagAArKQP/j0OcVTSCtQgz/A/kpMZ\no3JJWbCFALDj6y0/dS9q5IPi5V0DouOuxeFeUVhyndP3iMgbN7KiF6For801\nIXoYGJb2/RCAlDterCKUY3+4DyHRZ0GgY95Zl1Bs15+AIjTEZdq3c22ZtWrL\nVYz01eYaKl93/oCauM7GmGpjt+9IGuLVeshKm52pm1srTuDdJBpMXJxT6SXr\nEw89QdQafj5xAHqNfZm5A1mcvcHBJj4ydGKWbGYN+ghLhYXcK5aRR5V6rQde\nr5ID1tx/5vX4twCKZvMoSasPJ6tg60PTljJy6zwLB3BF7PlIxkTBBR5sVjg7\nzeOUkEraZbislivOCSLtR6SjWN4ZNKE9pZxu3c/EU39mh9V0RB3eTG0jD99+\n5zAcKIIAQGhDcAbtxWgfIpODtdYliA1hEzmRVovxgstn4UBwinsyC5fqp2WC\nctRjQAuW365+/FgdiRtKp9dRuqR53sm4DaogT1DWdvjBT/rvYYhO/eNCW/hg\nspCPa2Kyx5P8OF7OmFPKbmjnwVQrmlLVqEdkZu++rzoDU9TiW/3QZASY/qZw\nhpZ6sPEJY7FueNdZSMwz8PsFsQAU6O7qpp+8AGTeamR+Cjcb0u2oXrQPMxpL\nZSVVON941yUmUpBrDVf2ahOaTrBw5cZDms7DQVXk0tImcxg++LHzT+GyjH1y\nQCNL\r\n=aT6U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdOnA2S7oV+P2mrPN1nzY24TvKzc9QZHLmQmy1ThvOOAIgFoKJNnbzhMznYGIhbKBd0UgdVFm7FkMTG53XaL/gFSM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.9-test.1569680282222_1569680290852_0.2904494586298001"},"_hasShrinkwrap":false},"4.7.9":{"name":"ts-toolbelt","version":"4.7.9","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f039b55af0f2f3e4b4cf225af94af46fac9985db","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.9","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pHSd6xzfA2iRHujy1PKKByBdA30bWg13DqXndrm6afIwdpIxIlv9TPZdDwhULnlkDONx1tmIZBE5VIl5tLXZ8g==","shasum":"54c1a510ad3db6d210bc71ec44953bb4c22c90bf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.9.tgz","fileCount":220,"unpackedSize":221787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj2ybCRA9TVsSAnZWagAArsAP/3pLfQnNT0Gr45hv/4K6\nbj8zC7aKRdleUiS3hIzz5PreOB47NaeoGSEWIPruQ54AFmaGUxE1f3jZaj1W\nrUnKSUoxx10cJYGlFQ3+uryUUPnM6e7wJS3GNRC0+Zvum/0VCPCEzDaF0XVo\nwAt8Pp1zUhM4Ccr5gcPW38yOhamtxT3psxZdTQZDTCuxjUTkzm5u/g6QWHen\nmVVJ/VzcCVs18JXqs6h4Fz6tS/wch+Liif/Cc34vkJos0uEp5g2xcaPwri1F\nXkE5qrftLKwJy98OFy+ebx7bSWR6gIhdvQmQJbuBBP/lF9pvgdQwFWwiJSPM\nGFtDpwdw8I24puM26M9zbdHDQl5euAWqNvCOVwZH4JJZhbKNd0Nt3SuJUb85\nVTv+ZoJyVUrIK1Z75S7HGCY5WVGi5WBkQgQ78HQT/a/7nx/DeJHELf7kRMHs\ny5QSt0TC+1i33P7US5vfhZb9bUa93zlEbHbT7SpryFclUWr9W2tN+eBPoMft\nRFXsWvhtB37Crxl0GTnZBTOMCyw8v+kaDMBcAmjTB1UBDKl3m7Aa4BgFSmAT\n7bPkAxw16cSOHUpdahTG/5pikL8rftu20SS8HrgYO2t3flpk3uKBMNHMx/5j\nd/vzR+b8RsANFS1t2ri6h91CuFQrRalUCfxnOIKdFhQxJLWwugFcVBTDN/eN\nTHOA\r\n=Oyi+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCC3oaICrCj8th+5wpYPbsIVE+cW4AIAwEqqk9Gs7N7dAIgJPHResWZPAtM/BOCHDtud4CSK2HaM6g3F0uQ2aUrDFk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.9_1569680538989_0.21345019611836324"},"_hasShrinkwrap":false},"4.7.10-test.1569682307583":{"name":"ts-toolbelt","version":"4.7.10-test.1569682307583","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b08b3c8f6f38da2cdb4cc6d82632a9f279b7647d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" width=\"250px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> Example: https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.10-test.1569682307583","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-36SghyfSmd5bUTw2BiwtpDE0PrU7ZVdXyB0mHfNmOAP135RZOHWyIPBBt385jQiUoiai5s6hS6PkgYUYu3GwMw==","shasum":"c5b60d21f3f322e8a3d9c6452700921992c81f00","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.10-test.1569682307583.tgz","fileCount":219,"unpackedSize":222055,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj3ONCRA9TVsSAnZWagAAIqMP/ReDcgKeE6m3g6zD9jOr\nMSk/EFvflYwE71SMcl5g03NevPUw+9YMP2pzfwIVnPLC1j9UUxQOLHJCST2G\nD5ZMnmk07/rl1gqZdSyCwsvQZRwvIoEvGMWq112Zgt6FVweVuOXWZixaIStX\nzjp1+IOUvDsBOylM+urPb0mWzDfIWR0DBhCSDSiO9yALeIVVKlem7OXLmNmR\nGluU4IfZGWcfFoiqYyp8c16IvHT0uIvDMghSWmCIdsj3ZL/SeUW4Wx2WXn3f\n6v1hw2fLpnZvnPCeODoONdwJtHFsGf94+5s+ODfi7Vn+giNmRWpM/i/4Tbpm\nj0+9pTVzlPJi26++GtkjjfwLM9yRp0dZTA7RIMuE6kij9CFrz8Mu32Q6J0mV\nfZFeoDxv+kL416gZ/UtiRrqryHkfH7HykWNiiCp7NBh1qSjIv6Q3SvAuKex1\nmtnDObCMm2dTByI6e8M7MbqZxY76EvTuUNWcyXdctfeITnVGhnUGai3ik5av\noE0JJuupHdoxtWHQ5PhV4pl2YBmhAtYHvI1XvXvZK7HnwBzjX+zzrJTlm1Ms\nBpxsj07aybMHcxH3vtVB6cHcwrKCDm0d8lLOivhJN6xCyK/8D/ZHSGDSZtmB\nQRT2OkQzxdEGKUHK2Ma34F1Y82xvEhSkVlLOdke4JsB+b8bbvD5V/8HP63Qf\ncw9O\r\n=87hx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHcN/P0JL6GapxTGD+2aoJJOUqYSn4gYzIfOvB7labF4AiA/+YDKPlh6panDoTQD8RB4FXixRPESyStfc27Ykz1evg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.10-test.1569682307583_1569682316501_0.31609124596163873"},"_hasShrinkwrap":false},"4.7.11-test.1569682499978":{"name":"ts-toolbelt","version":"4.7.11-test.1569682499978","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d604f5dd43ebf13c836fafb57afdee78b781fdb4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" width=\"250px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.11-test.1569682499978","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-jYQstCq41cVjdR7b7kqsi0TzCGgVEjrI8Ol+y8pIBmq7sGP6Vx9s0SCKiPlJGelZMFpeTIIw9cUbrakW7hGpRQ==","shasum":"d55ddaf52d32e13dd0921894db5509b87d717e0f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.11-test.1569682499978.tgz","fileCount":219,"unpackedSize":222265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj3RNCRA9TVsSAnZWagAABLkQAJEo0HljZ3roaeKpBiT/\nXS8IgNRboT8BOTvlU1W979d0wUeiA6m5/UV6U9vNOLFvZOs3iWGsJ/OzC2rq\nPOwg3BX0FD0kBdiTWALbStdnzWv+dO4A7pFY+V6bOY9lho83AohxGKTSCVWI\nsM/94dmCniyxYABa+SJketpq3Ms+0eAw0ByVwEhP9mu9b5vlg2puCG2g0a7i\naauNEFNygk10PYCJ9v26khO0R5a2narXJjD6DWMub5DsiweRvVtX5VHp8c63\nSU9I7ABS84tjS6RqtLnsBc3vTxLsH1l5R5+Zl0Mnnq/jYZzA4vKmySIbD2sX\ng0NG7/nC/aWlr+a2voxHHBz/XuJJ8vgSLMtgRbAr3nl4vEaXg8L+HgvdpWzh\n8oyBrwu/3ic2HeKhtotKDO38uWRj7c1n+TfkObu5BJ+yJxtILmeBz0Adkc9w\n1Hg9A2qk8foQ5/8Xe4KvaLuQ2PsrQLvm1xYYsnmXf/7UkSsaYwD/SnH+CT4l\nW6FUDJnB6yhjARyNzida3oQfAAIIqp3U44NlWP+IfeGhMGp+1G4YyLFDtYL7\nanQb59J1Yd1fUAQWQDJNB/1YcTcbELJMeHcyOzKM/U3V0sVxN0mQq5HxtmfE\nU0ga1kB+5aYgzkYL9wXcu7tnkVtIkm7C9DM5QBoR04oKWKXjGPmyN0raGqX7\nuaCo\r\n=nLfv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmPVVdHQSGjEzPpPeZdk/wxkowmBmoduCXTNi+7EzHNAIgJB/8KSlqNmR7ojQNDnB4jpVhDs0JON/a4qoZjKFTwcM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.11-test.1569682499978_1569682508370_0.6575030520702687"},"_hasShrinkwrap":false},"4.7.12-test.1569682551884":{"name":"ts-toolbelt","version":"4.7.12-test.1569682551884","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"aa3836c04d8f58f58e3f77e4486ae43d3c3a6799","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" width=\"250px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt-logo.svg?sanitize=true\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.12-test.1569682551884","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-iSlJUnycS7s0wOC3avokrrDgBWwvZDE29OrPBuHEmGlAuc117ax/Jnk4gDahT3NVm4yOiP2494tct2rq9ZflPA==","shasum":"bebb5bc95d17b77ca38e4f8c55fd5778b6e00346","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.12-test.1569682551884.tgz","fileCount":219,"unpackedSize":222460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj3SBCRA9TVsSAnZWagAA6uIP/12EoYPuGMu+cJucAsyJ\nfQDaWn9oC7xIc6gmrzICGRlFvLENYDPZqemsxu85dQqwYZ5zzHf3Zq5JX+Qq\nzck9VEiXjQL5VrCDebZ4jVSoSVF2GNtgz/8GpMCwlZOMmg8xr8TLRlhwmu9O\nLMQWcUNkp6b+2AQOdr8XxFZ8m7dJjm2flI/HW3tQWzzMl82yOCM8EdD3SS2C\nMPz5K8tpgb4Fr84l3xVYrfF0eRq9iXbMjSNBo7AzVBv625JWdaTP37MOQ8Ms\nthetgxSvBtDESbVI0q8WHzN4NvN5eCtzFzuUiuqWh3XX/WHyN1hRxtwLjyNL\n0HLmuU+aMN4+fqX2Qvro3zJbqxDXs8rXqbkhPwhdQL0K4ZjZZy7X0ywGUfTf\n8jpT5lDj2xQSGAMzkhkXJLhut8ykdaqmm608VI7iFz1waYoYP3eOFN8a1VMb\nzZKF7fnzq9/XiMseJX8rNXtbY2EpNEG5Zqmrp2DkiJa05gu1sC9lvFSdQqdm\nJ/tI3GyDu6/erC4s0MwvKFRG9lgZCekLFhRdoxhSx0BznFiLHW8k4K/HbigR\nkSwmAC6dg4v4WX/PpgMGsSb/NUjRM9PEIqfxNxBbCZ8sc5QsWcAcnLoHuTvj\nMo4K3hAlhaW+Uh7Lc8jOk8Rcj1RIgnjWzfz3eaRN+QnEK8P+qRJJRYgb2MS0\nQmi3\r\n=FGHN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDsUwwTAgqdP2leZgEdpwhM1ukh9Qkmn/JgPZI/bhqfQIhANYl4Hxr3PnllV6uxZyfC6soxBIgH7J8gdd2rbjn2OMP"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.12-test.1569682551884_1569682560296_0.11592119324881467"},"_hasShrinkwrap":false},"4.7.10":{"name":"ts-toolbelt","version":"4.7.10","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b08b3c8f6f38da2cdb4cc6d82632a9f279b7647d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.10","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-nG+e2GwZMk2KW877MEVj/U+WgMh44PYGXWtZSPm+Cx5BZNwFgDDq8tEKsfaiarw7NuBU4V4MZmhow4O/mqA7zA==","shasum":"1ae79b806ff7a621f330035a9016110b64daa699","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.10.tgz","fileCount":220,"unpackedSize":222036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj3SQCRA9TVsSAnZWagAAlyMQAI+mAOC7PRuXuvC2QSnJ\nj2jygxqknESCgqhIWMjsp7IH3/Zetg1BL4bvxNX7MB/9e+XrNe29CGSNHUM9\nkT33L6a4B27yIw8z85D6RPFBiP89E8P2cYfdYeYGqpGbdOp/FKi5r/VyYoHX\nzlqbYDRaFW3Ha9XlEzKJCUGS2JFmXXRAhGMuRP9x+8GuaQ0x07zO/dslh5AU\nbXpI97UYzcEIpr4JFUOOstO/HV5ERySgHTvM1ruwq51rE29Vj0LffJpyp7kA\ntRNI2/MkGWPIFna8DTYKltW07TzmVoOV7pKpqqm0sLVSJYHWTjt8zYMrveVi\nXmicoF8DW/d0JmR/7BKd1oDHgAAtlxtKb1K8V5vM7IWtspvrXeXQJ03a/Qnv\nrBEYU6jJ4EVAIwQhxp5mENXUUPmk7yiKY93Nfb1+e3AefG1uh0JbsuLUOKs2\nQ83Xxwq/Gx8Q4ahUpYmeVRbYgw+wjqAGgueuaplUVhK8VwGhyghGHNfTE1b/\nw5PB8UdcWlKtqmagheDTQnkysxGbGmsI49A1hs4RMEpj1JgRHwHT+IvS3wnA\nVExr0UsWpLkr1i7htmvvIIw0UV9hERK7uMmY1rEg/o5poWlSfaFL+X0HcgDV\nsv7vV1S4PNd4aB5K3RfGLQE7DqWyncdcQA7tddUFHZMmfaASMFO53pl4fLC4\nrRVV\r\n=KFZl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICv37PP4bQoqDEXr8uM21chotU9B2ZF2raRbKvG0PVUGAiBbyhW3LDTJ+iB1xYBVSuhtywFb7U/ZSG0oQpZicmxeOw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.10_1569682575988_0.41076747100209676"},"_hasShrinkwrap":false},"4.7.11":{"name":"ts-toolbelt","version":"4.7.11","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d604f5dd43ebf13c836fafb57afdee78b781fdb4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.11","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ok6ZkdatNgJcJKrCWxO+xLFC0+mJp+DQGf9Q1BmvdkbVlhENJ83GCqHbSF1nsWSEiPhWiHK6AWNRS9XfJPpQwA==","shasum":"1f2f2eaad7dd110e196dab82fe87e604766ef091","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.11.tgz","fileCount":220,"unpackedSize":222246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj3VLCRA9TVsSAnZWagAABCkQAIKS8ZLGHZ7RSvG1d3UZ\neVQJ3x51CdTLw2CCNwa8E0q1Oa7DH/TPyi/hAvhkzccOg4LjmYfxPfsHd3z6\n1/vltCX78+OaVRywLytzAhrBvRw+Nk7bp1roM2P8jA2YFH8QS7/RhWRnacVW\n1u5MQIGkgfzlzSZM5DpDjannMjOYyUNRJBoGyu+FAy9Oi9nTBvwJtGtSFtFZ\nNuwLFUjquJ70q3l0UGI3QiTNSj3LLECYqtQQDT13gjDA+4DjUttKa6b37+66\nw1cTSzkC6FiMSi0676E990wlg4g0OcHHafbscCUsoZq/NBRmOr+2TAMfw+Kn\nFULDso7HatzYKzWH/U6ouGbiyhu2Qhqtdly/i8nkRsBLhdkXMRDUM3tyS/qX\nXMJkylTgvhw3smnyP2ha68wNZe1iDjkdw/Qi304XjZ1Y/Ps8+a3CXbJApNSg\nDLMfcwwuPAvfZx+4/YcQS7UzIRzHRS5Ae7NrntqqwDwW7nwl+Cing8QZcHra\nKCK7OIaNRxuOsGVL394enBwKQ4X9U2xdZFaKueFmV57h+uo58B2tChFYH0BD\nUw+RRBPk0+WXjB+PJTTYt0Om9o5VmunhEMtpfPgK7sJzYLazsopp1z4G8DKN\nT3FL5XXUXtEYYYwwahApDzIaKr4xPfroJ+AOQ7uYnjr8BH4wwEBu7k82qaMY\nHfHW\r\n=lmGN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDLnEXl0VcmMTtST+KKzCZ3s+perx85zThdu5A8dCEWAIgWkruXpvYLgt+M8nQ6t7O8TRvz+BM7/jYG6+ffksHU7U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.11_1569682762620_0.7189866438553572"},"_hasShrinkwrap":false},"4.7.12":{"name":"ts-toolbelt","version":"4.7.12","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"aa3836c04d8f58f58e3f77e4486ae43d3c3a6799","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zVXFRIX7fgFQtQoiRe+IjBt7uoUTRs06lXOHG2nV345EomsJ2JEL4DxWQWsO2K5vp9FRHZwKgKJzs6jhDxvsCA==","shasum":"6d890983a3eea9894832ab5bcf749fd6d26c6b27","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.12.tgz","fileCount":220,"unpackedSize":222441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj3VqCRA9TVsSAnZWagAAPGUQAItq93vkPS8rmc4fjoSq\n+OzRycVko49WaBaJBWmlnKufNvNeirl+YNSay3de/SNEzhBidPgUXVc/HFbT\nemildthtxApOW47hmzrSaPkPWmvbuQjTiqN/H51n4Wy7nR3uQZldGcYzJVnU\nuuDm62sPYqepAxJmVOc9yGV7RIVih/f1EDYxRFXizCqwt4wLF9uqazi+KRxR\nCVjIdQeN77y8p2T+FVqbMceyk/7uTQv0mDvZY+kF+e7QfH0SogfiaJf8ihja\nUCxjNje0gWQnxpf7yUWqrGbYLugt3lW7sq+HGWGp3lmZ/8yTxQeUY4/TPQGd\nZBeH1ROCz945/9cV3yKDZHyMFnNo35xNNfrcNs+mjXdlou3yuYAWDan4FMa5\njBw7vdmYM7ZTi0GQyhOZIclV41hp3P/u427sm5lJNEd9MY8b44a++Qu4D153\nWY3zPj0R3DFhokatkH92p+VwTMbH5atbrG7ARlrMscuJgToztMXGNVavib7o\nuOsVsACXBsZcLrNmx04Boi4D5rDg+trbp3EKl9nsfqhIp3OjVJjVHZQAoqTZ\nx/7isOIhOH2VBVfM9TCB2M6Tc5HmSh5okLqZmjr6uUKNYLxkTltXCAXnu0mW\nEXxjVVtrRQbYrB7wmwT3ImlUz1fDGctjBgZRwghDi2UaHdNmGZn3sojYhxAr\nEi3z\r\n=mPa8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQY0azUX7TsX6scXEQbjj7djgNPvDURFKRLTRrqPdSAwIgIaKs3WA00RoSJe6zYC8zpOqk0HeKY0CZhxMKy9KgO84="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.12_1569682793977_0.783615693655707"},"_hasShrinkwrap":false},"4.7.13-test.1569690049531":{"name":"ts-toolbelt","version":"4.7.13-test.1569690049531","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"2c7359a9c229efa0a80ad83025fbdebc4192ba4c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"60px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"60px\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"60px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"60px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.13-test.1569690049531","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-3ZbTF+UOAiejvk/p8kKglbcfyr3TUZgrSbaU5cHMq71XTRz+OWSZ0E0E4cmtONwfHLClG69BVIpG6Ff8we6cew==","shasum":"61cf3d96b88eb3189938a134a80273d26d116b08","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.13-test.1569690049531.tgz","fileCount":219,"unpackedSize":223050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5HKCRA9TVsSAnZWagAAVBoP/1epDY6AwmKsZ4q2KKVm\nzvkdmivFuepvW2sQil0DUoFCu8HE5wXLjrWac+/1lXKZmm3AaTmZtRLfT5KN\nb4DMhgAktgDJRXWVngGg5hKBzrlv+LzZ02S2bMpe//IAgoNWcBqwHRpat2TN\nnBl86A4bHMfN44xDs6uWJ8TaIPvAOeEI12bFc+sLlsmp1E7+XOPt8Gr9or3g\nh6mXFg1SkDABpZDa+EBDYXqv42FfLYoQ2EY0rVCFfs318k40RrVOlBpXg2tb\nsuB0OSad9z4iolNULxjUcUEhg5w8gVDmljbobuCUl8cGNageL9ZkTYRYZgrs\ntCrVsaS09ITALTf6YmWga7HwBwwtpK1pQMkIBzkWCvdYgoKi5FZw1yGzKAFU\nWGrHYO+EIKOgvXSAaDQ6JLxNli+iB3jLQ+0WRFwKa0tvzUkKh/kbMmGS77rs\nwd0G6t7RZWUs/PEpe809bBc2GIpbLhugWozqvJ19XHv8gUdH2W6NJe65uTXd\nw/FM4VPZhL1dIFUIsCJraT5/8Qxmhsuv84wLF7b7CGljDUm5AlWqWN/V+aGp\nzEi2Lq0u1of88/rWueqoO1IZUY6e23payZW7Lg/bhQFBhycRzS4t7zuz+svs\nXxariLbXEmnL6Miz6W1MMj5EyTaMCGfx5Je3TtP5EbpiNas5QnYZTiTtUo6j\nO9kZ\r\n=+SLY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4UtYi5R9XUGKqOuypNNxO184g98P8X6ZKO2QBbnyOEAIgL3M1S6rKpGcbqDN3WtTn/Uh2EvOXJrpTyAnSSy5wh8U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.13-test.1569690049531_1569690057965_0.9241372465426778"},"_hasShrinkwrap":false},"4.7.14-test.1569690275538":{"name":"ts-toolbelt","version":"4.7.14-test.1569690275538","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d43a7bbd9a03eb4732ae044c78b9e8ecabac4765","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.14-test.1569690275538","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bq4o15jCzIlHljmKj1YZwQNAlgZyJn5+1n9Dn4xGme2ff8JvYenwKYxyZsmslSpg6gT0YxlEjk9xxaa83F+sDA==","shasum":"f090ed858e189ad053a8e00c0b14599a5cc4e4c9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.14-test.1569690275538.tgz","fileCount":219,"unpackedSize":223235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5KtCRA9TVsSAnZWagAAJ0IP/08MHtLMc3vEUZtyRWdX\n/bm36bvBVkCltvYmz6j8BtY6B2yY5+mhk4iwh5C6VB1nk/vnhd8cN6soWm2p\nsyFoVi+j2ZfcACngIDMbRWnkN6uEbk7KUbqI4jZ68iIrV1WD2EdENjuwxqUE\nFzc3QNQpsxw4biDT7pRbf8VQe4xkZXwrlQtxZurNXqBzF5yrnBzKQ+4bHZY/\n1e5d9GwYM6XrozXeCb6C6yvBKYF7vWzUWrRzj7EBNZxqiZcjT/4oTB8epJyM\nx4ougok5udRxOYuAvHDhc1n5YD7A08Ies4AjbwPndolbnwMuoRX7NT/g7BZ9\nSBurLawCoOgR+d2mO23HTqBh2jr/yYaos/ZsNsVgmyfHICTBrS+b98V/YDut\nd4w2cU5/oA0FGA4HvmiMFWSoWUSiYEQ1L6JBe2Pgmk4cKPgeZWwD0EjtyW8k\nwmxKum7m7ErawnK4gTXQT3nbYOhODYXroVUv1CK+nvgVTTq+BslNuRIE/Y5B\nNyShbMb65JQx1UFHqMpiXf27Mh7zSg4nJpJiZGtlXBSx99B5SdDDJSfFYaTT\n9OBDV+EounNxdnV31TCugGQT6D8bDG0WT2Hj8p062ITydbvUPlXCwvWxU1L5\nYO9xvH0Jreo/QIEiTHqkJkIWnzYZT9F9vdTH4dpLwS44U6D4R+9c808twJOH\nG5ki\r\n=UI54\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAzrjiE88tp9ijRiDTopGR3AFc9AjDLG4V2zcwwV1fDOAiEAgUl+7s9/1mgwCZCF/BKYiHqxxarYGfhVkOLIIUfbJJ4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.14-test.1569690275538_1569690284274_0.8586501768106773"},"_hasShrinkwrap":false},"4.7.13":{"name":"ts-toolbelt","version":"4.7.13","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"2c7359a9c229efa0a80ad83025fbdebc4192ba4c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.13","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+6Ky2+VdQJ7Y6ytfBxR5Vft2yk/yVSLiwTDZfBlv1OttxcAwmMtHmv3Wjcfj3eTsYZ/xeK4ZbJA177yMrUWKDw==","shasum":"ebeeaeadcb58b4a43f254f16f7d39019578d85bb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.13.tgz","fileCount":220,"unpackedSize":223031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5LHCRA9TVsSAnZWagAAY7oP/1j96Ni+ynEzLS/UN2mY\nw/i7NsRWhPvLVTr4+6d+/VCOmyueMMzu9Mmza2kGCNVvOaZlmG+DyywXM0X5\n2ekdoBP2yDOdXwPWSWCWmM2PO9APyGBfIoN5iv6U0/GAySMXbEQdJWdrvZDI\nOoxAfRJO1HD+WKfxxGMsVtM2GgQSW9jszoM5x/ndBwCcyppmuXs+walj5wOn\nbwCpkGoFQwtDKW/1TobrrNvTbUNUXBb10AmBdv3Ok6S86b5dwp93U1T3pHSu\ntx/LChL7mLDKKDTmGlXKdUcmXdGNHCrwtRrf3IvTipVHqeGyOf489VI0JmY0\npkeo2LapFgeLLlsIzeCFQXUvf75nL6q6fuA5OQDb3t4zyLJvpsOPwSR/Mq9t\n+in5gpdeQsuXOr+DdnRfwFGMG12ZE3alfCvfrcUrvJvY957wOutB1AZ9l3C9\nixbiEibWJ2abjetWVc/nJTgtuG2ZHNrvzgpE6Y+S0QsrnORSZzZBIpEXkTN0\nr4r5r7jadSgWX76XhwAHxSFHx6cc9d0+MguSVBNADBzK4mPuiJXgHZeRwSTF\neb2T7Vdq5d1gscNgwZ2TdlJHIk7o5MPZX9A5uIgirg/RBeQYUfHNeFWp9KwD\naxajsizbed8qgR6VN8tHxOwMOxD0AxnlRZ8umR7oz31oE6zciuzkTPwObUFh\nCpMV\r\n=QAjo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGl1WnrslhGBxqzj6qLLjzRxrAMTh8c+XaEteot4aLsAIhAKYH7bT06TIoECsgdkOEgpcDMPhBX3PB3/pvYNTBeqkF"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.13_1569690310307_0.034375713957344844"},"_hasShrinkwrap":false},"4.7.15-test.1569690460666":{"name":"ts-toolbelt","version":"4.7.15-test.1569690460666","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f2738c13d06b39e7ed4a75b28e6050d259e71c80","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.15-test.1569690460666","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6lg2nCUMnME/7+HNekpaqlitkmN+QQHM9AYbh0ItL16JNp3v3xZO7jPoS/0P3ITGTRg8/e2ZLzTuhSYDgOuHKg==","shasum":"74922456cb0f9275323931c69fc472dd4ab554b4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.15-test.1569690460666.tgz","fileCount":219,"unpackedSize":223420,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5NmCRA9TVsSAnZWagAA3P4P/AzhkdDuOPBhXyQoKcAY\nrrQlhv+HO+U1fYqSRMtXgT8PJA4RI9KPXsxArug6ujnKLG5km4fl5gc2XuFP\nWgAJDxHM7qPmsXEgWvqTWJKUIx7FVMIvX0vShQL+0G8tTQvtbzaq9ovQtNz7\nscOs68/yV9qdXiMKib6VXME3o1WhCbepXzF7UABQ6cYwFgKK4Gioe7vA/IIu\n2jtu2xThgrHqOYKbUODsnjxUD5XIE93I3SVKUP1NlSOw2CGpv3rPJd13qQaO\nfNw+s58lYndtN7jq3O33oHh7lo8ZF8OCqbAv3Blx/8vV/fcCmRYHrAtm6rhp\nPuJ79CkFYNJtSI2sNOwbCY0+A4cNf7Q1oMCxb3xnEj5Blor8sFg/1h1v0gFM\noiqK3QVMtcFmve22VCP4dzY8/clzHtroIHusyicBFHDBpyW3K7/IB/VyTBOr\n6eeWisA4V9aw0rFUZiGrVT3HKt3u36wkaewZ7M0OZN19N9vybOnegQfOHweT\nZotH+L3jA4bUjwu9eODhQt6KtK8ZC54vERaJGKuRecsSdv4gbc9YYuVLfA/r\nZKL5BBkD4hHnNNS+mtJaI7jfANN/KrNSIsi8HDbvZFRP50d5hk7es16t2/yv\n27ASK2VscqkRR9HzIxdHkUtMTOsWVAel5PvHJGF+hR2DbyoxwnvGd2S3huhv\nEVce\r\n=jj4V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCsIjzb+323d601qaHe4pVoUclwO6ix637kWgsL7J7NwIhAKvLLpfCDx7zfQvKPrH14hC7h0xp6/t6mjJS8EtHcT8g"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.15-test.1569690460666_1569690469331_0.8980904088367485"},"_hasShrinkwrap":false},"4.7.14":{"name":"ts-toolbelt","version":"4.7.14","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d43a7bbd9a03eb4732ae044c78b9e8ecabac4765","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.14","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-VfbYcP0LjsU599pnuiccVfHT5tZk4wzJU0ULFUzyPHhh4cxU6IWqW2DDoQYneG6Y4ryESj2dTpyIIrWMCY/6Kw==","shasum":"e86d36aa49df3a00eb3a530a6503aaa7dc39dc80","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.14.tgz","fileCount":220,"unpackedSize":223216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5OVCRA9TVsSAnZWagAA+XkP+QDbXYKw8YEvHkrokZ+r\nveodZq8yyLG027BLCijayHhtKd8W4Vphfiku6S0foNqnZRlQ/Kcp02y6xfWe\n423NL0/e1tXUWlPCAnncUEL0uvDqQ0llBI7oh/wIlH2ShnN4lxSd60RZp8qE\nerXl/QJBDCgi/kN+q3zM/OYvWvJ65kKj+HLHbEqseARzGfJoZuLJwBKFxfkS\n/gAzLiH8F1TN1lYTHzwqtVVPTYs1S88MTEqLAlawIqaIu2MPIjrO4A0LlQSe\n4z5UjzlHd2JnB1G9H+ZMyHqrR79rxibqDok0rQP0OKZnf+m08JMnGs1ID88j\nZnugRmOAx6G6pAnubdwlDCavPP5rXzQwP5KE7nDaTMCAik0Bft9AEN2mIQrB\n47suwSUWmOTY5PzYGSOiwMpuzc4Z2udRt1RdgEReewGtULmAyAuc5+rvkuhP\nJSDQMy/nAHCi4Z1C2+m2BhZd7Gkq4YBRxLCX8w9D/dAy125XK0YnB1nI12BG\nYQq1y2Zx9oUo2KSlktG7YbzLyxYJc8kgTZ+KUV4rLMSuedCvxaUyhLxQttCQ\ncw4uelPuQxOfNidO7rQ2cvwmqCQ0csjum3AHrnenUbdyH4OoRW04rYn05v39\n1q4roDjrfjlNYSvSiM7D3cLuD2N3r6k92opdJd4pZpt3yqhZ7R2hZ5xkPAge\nQ5P8\r\n=Wfvi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGBxzxhy2nX2hhBlEbSYAI+nhfIKYNjK+HBfjKiJ4YnvAiEA7bugJLG/pBbh2nOjv7jKSJANvQGVb6qcrmCBkXdRQPk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.14_1569690516509_0.2676524357540071"},"_hasShrinkwrap":false},"4.7.15":{"name":"ts-toolbelt","version":"4.7.15","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f2738c13d06b39e7ed4a75b28e6050d259e71c80","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.15","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-3JVPHXhLK5nXitw4EWNKE9bS0Bv3xcH7JkezbxNskqFhZE6kr6A+cGlN+hN1UFL1TAHPreHNMAdp5RzN5Efpkg==","shasum":"83ff88b1829b3698d515787a69de9d9c4047ee85","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.15.tgz","fileCount":220,"unpackedSize":223401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5RoCRA9TVsSAnZWagAAVeIP/0BNSnuyB8yN0HhrE1v/\nAzkchlYCPT3MpC25oTeNWYRmVElgjduCtoBzL8KLJaRg01VY0RrUZLRWmRi4\nJPb+xUfPGvIGmoZYESoGq+N7LmiMg6BS+ZZh7EFapDIs3FC/FDym/pvYvVzH\nMg0HrX8YIL+dYp5WWzdxRPQZWb237bBZ4Q2vi3f8Xt2CF+00EVtEFvDSfQ+A\nPMQX0RwkcRWK3/RZsg86rf7c+Txoc0hVZIU11hbr20NtwERPrPqOp/vm8K/e\nB3X6rGchei+pZO1gG7uaSTJThoCulLMFA6aqraL67mlmdDYc03/xhbNPa61f\nYAj+xzJuKFDBmGKPsUk+Tpif9gGf7bjK37LTpQnfe91SHllWVAcboO/lUtpe\nv7cfh4tvVzxYt/KHuneYCcoau6x8CsSQhKxlyQ0A3yVVlP5q5AsBbS7FgJLm\nzunSJRNQ+kHmF1daoD6hSZWcnCaLJT3zmdUMFlsKnY6ATJt+qCXkDd/8pEyG\nYdnKdDOMWbHIWllJbE4XgDBS08uMUaGqB9Ism9wz8c8bY0jrWg/PUeKXaBd8\ndRA7CGRah3RfGigDjmdq2hWCZTZqUQXuaR6MJYR3/HpcLT9yQkev8y67HckJ\nSqZUjJJFYc3cYa9QT9Th4xJ3LhmFFslUnCZEtFS3zS936o3DvOZ+cc1Y2hhx\nrwof\r\n=TPdk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcliBFoslhbSI2DaiYA+BSupgHTLFTn2nk5J8HEq5OcQIhAIvMTYlNOFjPgpvQCDPZQ/8Z5gLFg4v73Ql4jewseeeC"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.15_1569690727208_0.3951954636910717"},"_hasShrinkwrap":false},"4.7.16-test.1569690981914":{"name":"ts-toolbelt","version":"4.7.16-test.1569690981914","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"619edcbd05d39408062a9caa23c666a02ad5b715","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.16-test.1569690981914","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Ube7g84mf8d3BnxB62a4yok5T0+wYsMyz22nCNHoOsSrcE3dDRO9O72BTWhAn0ECF7semhh7/8IZWMC1EJPEiw==","shasum":"c677c59b0fd14179aff750c9db43f549321f9ed0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.16-test.1569690981914.tgz","fileCount":219,"unpackedSize":223604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5VuCRA9TVsSAnZWagAAuacP/RTPbAhbhMoE+FptFyD0\nGkUQ2mjTIt/EPAPsfhviOppjcuUN6wMZEUC3ZfT0m7qj8XLW5wiBRuEuZkjW\nhg6jrIlg2BzloA36lnsjKeRS+OKr16kzbvoZC9O4wE8Eo1OeJcHw3VDE5sAO\nfl/hIpS1pcs5wlIhMf6qVjqMNfOFaEF4wfzyBkpRpQzyhPY3QhdkytWF24N+\nqJUGtImf1i757GL7eOv41612kRebiLzWPNuJkbG3soJXhMRoLs4BvsjnebOm\nnqGQn6SiHdnh1bbScMIS0PuIZs4C0KtAX6Q3A74Fns1oIWDC8EhwzQbxqIlC\nf7sj9DjEPIuZ4K4Sb0HI4KjZlO0xtKbqCwxhsdAcQPy5McCFFsxrSE1fcDUy\nvcfOQbnMoR5HRSLFDdI8aDh4tsmNAikLAn/xT3mLlGX31d1n6GZHSFVFlIJp\nu8o+e+Zw+pGv0XCkMOawfL8bZ3eN3adCr2jpZPA9VZ+LUSlaStOMqlmIkYVI\n5VT3XN1PVbPsusVmcSPKVfnU9hoTBkF2nAEr9ReTdUuucAQVna3+VOD7BUyg\n2vl94RtCHflzuTR55b1m1XJ6Q26qTRQhs2pZmaEgkpVPmZ4kldRN+Gh+K0HU\nEJ3sVbxlol8hXA9DkDCjBsuZZxKUGfNuzLKEKusRGglAo3KRHTe/YJFtXv0E\nqgrS\r\n=neI2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkG4Y2GrR9C39MHbDZDR7pHf7I7ILDo3IlZeaCy7nGqAiEA5xAa0AgfMbH+K3FwdovPE2NmcK4Soof9FThAfk84VYQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.16-test.1569690981914_1569690990077_0.6117010777687673"},"_hasShrinkwrap":false},"4.7.16":{"name":"ts-toolbelt","version":"4.7.16","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"619edcbd05d39408062a9caa23c666a02ad5b715","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.16","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+y89LsksfdOjhZsyzUDr0tIn9B8iOJELiA9E30R/wVgn1p/+zGgeX7cbZYdq/2Cf6Ut6rcZVJW42AIi2vOR+jw==","shasum":"e85f40bed250406a39848e84ddec02f04cd3407d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.16.tgz","fileCount":220,"unpackedSize":223585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdj5ZgCRA9TVsSAnZWagAA2SgP/3Zac/rCkp/Ybp5TOSJa\nHAseTFg4ZX4crqZchmMd7ujUnjdfwHw5XGJ94tiGoBBeZF3XSnjD2kznuZ22\n4GOoc/0hgI2MOuRRa1cUuGyWS9ahZ5ukIqgWrqVyiWvBkEIiBROpEZvfag9X\nbow8EZ3p0QoFyKUIX5FQxCjL7NgRTLPQuXE5IhgrXWGmpw+Uek3z+5/UsLc1\n8jDvQax5ZeXb49HIiHGQWrsQOjBOKU3QLkv1NFcb8Ft1fQK6xhr8LvlP504L\niDBl/a+aCOMOI7ILDJ/4kF04FGEgLCcHrIs6/xXWwNN7SVNqluTKGy0KGU7L\nrwYnt1M3x6IePl2hwju5gx2OJHHUQ1SFI+aNTsCMjSlgY1P6BJOsWrETqtAp\ndUmEJzttEoKPLAG4TSPLWJszV+XfZBbb2eZMQePx6cS8iJzFyBWQoNyG6c0h\nXWuJL2MnJwE0b88YLZ+i6Opr4SjG1tB3X7Af1/riG9h5Xna85nuS0PrIxYEk\ngNauhxysKbUUfm29pvT/MYzjLnyHopF9q183B7g4ieI8Xdoc8g++ixpsdcZs\nsTodEBrxHfXajXpFGw0gBnlhPD/xMcdQP2jCAUGXY4e6pETRVqfhubAWdYIB\n7fmSAPHN392JLtP6CLS0xdSNwK5eZLAZ6I4Ny9JcqR2KcblKkvBdqUt4Telf\nS4Bg\r\n=+ScS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/CMd9pArHojdDr0Ca8Big841RW+k1QK38fhOYYu9/AQIhALmjBps04vtclsk/kd/GrxmMRY5/0pEL6nxsAxpMMMQR"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.16_1569691231609_0.20424413923610918"},"_hasShrinkwrap":false},"4.7.16-test.1569849883863":{"name":"ts-toolbelt","version":"4.7.16-test.1569849883863","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"56a0131bb693386c43fed0229c46884747fed8b4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.16-test.1569849883863","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-H4d7l9CG2x2asAi/qerwTOTTgi/ocSv5e29RilcdHV+V7BEFBTKOi6BI6hgnOnhTvGG8WVIRLVg5Dy4tyJcQzg==","shasum":"bad270f3b129f275f87366bc85b851c45dc19d39","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.16-test.1569849883863.tgz","fileCount":219,"unpackedSize":223772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkgIkCRA9TVsSAnZWagAAUOoQAJN+AV+BuwPqZGZQ9Cfz\nXHeWLLvDD8cVmea3A9ruJsEAeHb3OHKqSgKqvF5cM6jqPfX6MmUWLtj5UTXd\n0mBy+5XeFCY8VAbsiKDjMfUAUhiYO4j3VQ0nW9pI8ANbhr5Ee+BU02O2naAK\nW5oMFksyDMYP8Evo4aJ3A/MDqktK5eUN22vQ1b+Iz0Bh6PuntR7kTPfdPt4N\npIcveDaxmoMIzcJgxDift9vCXEwzbifw1vg3G93AN4jI3cX82ygk5s3NgDq4\nZIiJutA2XzKv7nDlJOYewTwLJXKWwNGiPfH1usaCdZnp7MCH+SMfBB/10HHo\nNEkKny52Tna/c9SkGvtEv6G8KveqBInm0ROHLndwyDvucvqd9KpC+d+YCDa4\nzFWILX+e685V4KYyavFc+bNuMd04EJRy/+hW0fNL9pVv7en6/t2m56jbW90z\nMSF6VJv42zlQnHOc8YTNk2/oBPjL8u3uv+rnD+LOuNfTeWYccrbN5M4RryI7\nbqXYISGPZU2KkqVqxeNKdmG9FKKsB3cgpEaN2umQ5IN/7rzULwK8xr0hOAut\neuQlAaudx4lrGiUNX2BWAJn4/X/I2QxHPTFY1Zxb0E018z9hxdwoA0wecVVT\nj/ya9EuIx/u3h3uWOpJLB8V6We6qi/WtRnUmPEJQQ1oARchJ1Nde0nS2hS8Q\nOzna\r\n=q17s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEKqrfvjwVvp0D7oVSbTMEmQegZhabn1FBYT9JPxrqbEAiEA4dsYQcJLgn0D6DE1XF+rJHfsLd/SLv/uMuvv+NljaAk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.16-test.1569849883863_1569849892078_0.9856263323657277"},"_hasShrinkwrap":false},"4.7.17-test.1569850359798":{"name":"ts-toolbelt","version":"4.7.17-test.1569850359798","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f56db18a0ae5367d427cea50584dd06a202f5c0c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   git push origin pr/CoolFeature\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.17-test.1569850359798","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-fbWZSg2o4nbwnpJwGGxTWFrNdT8ZVtCgZSFFpT6rW2dz345GyIEg+Cr9qQ9K6+eBcuSEjjkgkVkVZexQVrUrkg==","shasum":"481e104549af7b50b5fd6fe33f2cc2bf8bdd3a0e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.17-test.1569850359798.tgz","fileCount":219,"unpackedSize":224337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkgQBCRA9TVsSAnZWagAAaTsQAJZxywrGkI+1FrcT0hb7\nAS7zmyRTGflsaODLuleouZF26HouRMGr2bYYaicgVQ6lgONwR7Iy9E0vBK0k\nUxKFKouUZ7v4MzYPGh8AjvyADwHqQ2zJcopVaNkAZaUy+ZgVtFFmFDVOv/rX\npnhZDQt5G+o2GBhbQurlr4OfJoFML850bj6d8TJioIuvFIjI0nvilmjIGYcC\no2nSn63LtVotWKPIeLW59N0TcMA+di4yquu8W5anGdXnSroNiF9sz7BUVeoX\nB0MY0cUbn8rYJ0cDhS+GEV4F4uhyq6utnhd9+NlWIvlHb4gs/AdygM2ktn5g\nYJoXYDDBjWVhyqEd68KcUwULYntCbfUwpMwF3sUCoAxoUCpt8pTRwIUg6++D\nSSLnRzEUc4JXD7g07Vawv7jzMPRvlmbJUdDESqMUkCtc2hXnvElU1XTbadUM\nR6dIfwDtldvI24UW0H/yBIl8WJgK6jKZAI2TEcsAZKB7gUJFbHWrLmL/O5qZ\nI8VpHefqRFMfUpZ7efWExBvXczj2kBxtI+lysLPGqeRvMp+PzO14s3OKAisC\nB3dVuAMzsmg2M8TeYJSnAv+CGsueiHCKfmzw+qazQMrgi1wasm5ifxEaPz2e\nphVjhtTtV1Ni1jlsJQzOEhR0g6IC0nvD/EEH18sj9Afl02lGWmLmz42rLQRc\no5MS\r\n=7iKc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFmuH0H4cVmlopgJGDF3UApNjBXJq+uE6HGUPlDrdxB2AiEAtBpvSFFMJef4JYDeHjinzsxCSfXIGdy24L8yvtKqPq4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.17-test.1569850359798_1569850369152_0.13518241952655186"},"_hasShrinkwrap":false},"4.7.17":{"name":"ts-toolbelt","version":"4.7.17","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f56db18a0ae5367d427cea50584dd06a202f5c0c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.17","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-OGHhQwFXKdL5v/l0cyBuWnuGP6QjpDYv6mK+74eQyJJpWcPqu4sRIELi1pnusJCicLuPmOXamCDjgfLCkWSGDQ==","shasum":"1aba74df3723fd6215aff644cf885684c79de28e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.17.tgz","fileCount":220,"unpackedSize":224318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkgUMCRA9TVsSAnZWagAAaA0P/jBebcm5xBPvocMV8e34\nO81KNgCjCgCTf7uj9J2bxw5oq/yc6e/EzF6EG6OqbHP8iQtLOMYob6jNieA4\ndhBoWWxfDL10A0QPZKVe+06Ux8CEviMptN9pMQ0lbgOpBhEdGt5nr3VL+U88\nOjqYcvTlxUiuNQGDmHq7H8nE2AV15ItaDRcaSmxKQfJinaPkiKcrRh7/4eMr\nIRxAF0F2r2p3BC6ah0cl1pGSsFQqPh/Hip18I2qE/76DiW+CqvamSe9/CTWJ\nejkqIQOY4ZJwqm/ePPZ1CZq4a6ucONr5wubDPQT5bUL8/e8uZzfdTwy08lJM\n3JXGu902HnTt4xvqs5oA9hbMqgDFLSAzXb4JOriXUY0RGPDWQ6F8C0lLXYUi\nS97cA2jhuOiwhpHAvB9Tpf6sB7qPf47DD+QbmQzXBYwN6rUQ4avw7+UdQedk\nznSHlMebrMJ+b/6CUrz5tF83EsvGQdzGh0iK3nlB8nHSQ7IsCm9n7PxZ1Fl0\nyV8RCIJKiHxotTpCJ/cC19OxDzHiqBGrJE4BC7BoGD7ahhVQ+HxLiqZX09XL\nT5gzCYy9vDa2ZmUnKYpMVRtPAOwix5BZ/e25pjG/7Gfz5g2+ZpelwqPTkajX\ni9GwseOkpoZK1tAckLIX7MxByTJOW7YkP7teOEAnmF3ttNml2rhGQA6YeQL9\nzrH5\r\n=oCPa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGvU55/62JkfRPeI5DBnpS7V8ryH4reRtOeCMfAacKXTAiEAuuo5P+BrJhigFHtE6IzYp1d80drsEIHUajnSvzwG0Qs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.17_1569850635531_0.9482520604801112"},"_hasShrinkwrap":false},"4.7.18-test.1569851040676":{"name":"ts-toolbelt","version":"4.7.18-test.1569851040676","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"29809710c60b471f33cb6902bdc9dbb2134e1927","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.18-test.1569851040676","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-HNM5/NgPwpRWyrjW5zsf3qjgQst+JqacYHMgkXZwbvdePcBpfT0Lo9eD+mwrECG7rwnzaKDDk/S5q4vQ+PKgtQ==","shasum":"d51ce446f511a42ba4bd9b1215ddba1303d10a6b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.18-test.1569851040676.tgz","fileCount":219,"unpackedSize":224523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkgarCRA9TVsSAnZWagAAOWwP/iBpI4oCW4hoL+014LfA\nPVdGah2tveTXYS44UlL+tReY9ua2SKzuXlvDEcWiXVf+G3zPwPx8WeL0pM3b\nSLuGPjPXg4tCZjv/nJNk7+Rk+Cwq5xSGW/jLvA3zLwyNN23X4orL2EYZsyvS\n82Hr/2R5ALJpuKShnkWXZ7YoNqhlTBdmet7fhzPtFuL36FVC/lO2EhVUvfKG\nCmXSRjTOj3xJIFEUc3Nt4+aZbw4mfS6nr393Q2lK5JqQhq7cPxgiuuFfruSP\nSuHS77VErw7bX6rbE1T1uYNGR7+ynzH57dWTZ6mD9Uvwyk3W6Dzu+f4llxEV\ntP0a2yzo+2M6CTJTvF5L18MdGswRAQJkL7CRuGAAXN7+8ZeVtrs9Hx2ggthm\nnsz+DyqKmQe4L8DkPhJiahWyfbfPCYs3ApnkVC7nh9V2G55dPij02WYjpYh6\nVMmOH3YWFB7zm3uQsxqs5NedndWSVwhtcQJhASaT2+Wt12kGf45vEPinWAtw\nFGlyLvfZlCt8e4Mac+yTodfy/SUpbIfMaXEP/rf+Uof1pV5C+WBKMLKUnRtv\npoyzXUR71faeFfwsRqVcaEMTHRaXgQhOENPERwaQiwEQFl0WSglCSjB29HpE\nmcOelx2DnVQLoKQ0rhDJ/HDV7pF/cwwAFBclq7d+WZtQOh5VcG3+q9DWFlL4\nB9qL\r\n=xYm3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC4fZ/++WwCu7YKD3k4t/o7ahtoGFKceOrWXfZkY9iawAiEAlwQenSUM9GB1NF62/xH/KK98u0km1MOv1WBCQjNmzy8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.18-test.1569851040676_1569851050566_0.8616768418259928"},"_hasShrinkwrap":false},"4.7.18":{"name":"ts-toolbelt","version":"4.7.18","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"29809710c60b471f33cb6902bdc9dbb2134e1927","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.18","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-nsxuG3YDiSa7hVSTrwk3odmhvPl5qDTvrPk3GNSAvIUMOLIr3lOO9mlIbaBF2gE9P68lZguyePDGeVdskbBBXA==","shasum":"a04570d0c8cfaa93a7872ef62befac7d90a4e053","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.18.tgz","fileCount":220,"unpackedSize":224504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkgehCRA9TVsSAnZWagAAp04P/jQ3E+rMgHWoX8QrtDse\nulPh+sG6YvBRrCNuRbEPwAGc35UtZqYtMfFtNv6L1kJ7N4JGCAfkn7LTmz5h\n/ITpFWfJbsAnLVTIwjEODcvZwBkVumyOuvoMopd392ufNW+aVt76sgsBuip/\nMx/Kjildi6M93XUMq6r808BD7xK5iNOSmsMr3XgI2C9nqDYu0ihIQGCfEVh5\ny4/ZsUiUlB5YjhmDJbbMbtTHLI7dGdPROknDNT0WicIIPm+DZfLEfuzIK5SQ\njhLAKJfhsjIpkHrXSOhaFT0bAmPvgvpxl3GkG6oLHy+PgPEbZH+j3RFqg9lL\nZ0W7eum0p7sgAzMwaYVUfyc0lMmFRd9z+IUVjdM79ax6IMx9gV3rKHdR9S1r\ns4u18DR1gC1v47ltsZbJx1D9ELMGEIXvQW6cF1fn2dh+t+GxIwyUhjVUitfu\no1O/pEr3MiI0tnGjJKFPhPASeT0QCnOL0bMxbxBzqzriCEculg2Ww3aERW0B\ngH0oOahabFg4Ca1GMxVq4I5nDyu5bcD27tc9np1jJs4b7yGtONMdyDc5oj+a\nCF/JWxuQSqNr0k7gWj+Y0UmeKBGB8s9i63OvPTi5TO/7BQA9ZUsuHLB58mgX\n+nQ8KIu/2fxvGsny2NrM5sT6tDDq0WqMGxL6f38PRzv0AuLqVOpgHdsHqKay\nL5lm\r\n=RB16\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcVg8LIyURvRlCNu3dVW8TONpiFJoKldU2sJ6ggkqzWAiAVGlRUFAJkr12cj/Qf66ltPcd4G2MN3sOCuIWFwUC6Tw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.18_1569851296510_0.7954835142653454"},"_hasShrinkwrap":false},"4.7.19-test.1569871108887":{"name":"ts-toolbelt","version":"4.7.19-test.1569871108887","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"6e403ff800b17ee4ca8dc0e976ff76ece0dee5b9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.19-test.1569871108887","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-12LcxWa//H623IW+KPW0iWphiP7gXZAUNubKuN4TNF+EcGXpjeaVbRbUwnyKg2miXLUx5VOkqF3bfx5+cQ98Nw==","shasum":"fb8d15af89b0a95297680b7a2cd2b2ef1e1740f2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.19-test.1569871108887.tgz","fileCount":219,"unpackedSize":225069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdklUNCRA9TVsSAnZWagAAGWUQAJbleu+knVv9mU9TW7qY\nCoheIiLn4x/RYuRe0k3AB81Rh+7Lt7N2xhp+Qc6+tMduCmceTPs0PrFyRziG\nmlOgufAS8CjMeFymb1QYNCFbmvQ7aiOCrUxanngCg73TSGniXL06mgBOMzAL\nqNeQCX5ZHlhh+0wS1SW5qcawQ9OPikzZ5NqhZt152aihgityvgm6VM4dZNaG\nfU+e44bUKVc+AJk7cbo1O2ypvM9354HwEzjgmDZCo8OGRx7NWMl8rKhBH1kh\n0tYHsqjalA7A5brtYTpenAlB4MqZjSMAvO4LyXG3P6aHdA+0wZO4YpuBqUDv\nrYdp1xmRBiStMGKPMHqqU1nXNzblkX5Loi3Mric1dbrzrx0zaIL+F4ar5gTw\nx9H6/dXwyULFlazisR/uF4bLpico2tfsmYBqz7qEOL0FLIEM0DNSOWy/lZ93\nQuXNQ09BxfcT/ligLufKJ7JE2Tq5RAxF3RMGKF4AwRcyJrq8T0qnVNcERZdO\nHahRtgceT1s0grfdD7tzPSXNkzlC/GWs7ynw5Bw6d0H1IzNSfFOn1n90OQnr\n8vp21zvpH9qBOFHxFs4qfBqLLpYMFL/IyRaY98TlCCX+vexPe8fTf/M5dRvM\nsufwByHVrFOpHDhKg/gGtHgpnDYmZowno1Ym2ffk30NQflvHh0K/8KmEMvP+\nSzSx\r\n=DAUW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAXHP4+MdGWHioUjfkVrlTwMRsjGivH8lJ/IEgfcOGmBAiBY7e7GVDodhVbcgBM57KStivNIYWUcqPCecqNpCq99aQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.19-test.1569871108887_1569871117145_0.7804640530647988"},"_hasShrinkwrap":false},"4.7.19":{"name":"ts-toolbelt","version":"4.7.19","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"6e403ff800b17ee4ca8dc0e976ff76ece0dee5b9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.19","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qIqDUMilFyqyVftvpsgIvQ1wI6uAfZ1XPidQjnHK1sRw3hJqzAkEZplEnKJuatuB8bkuJ+eVpbgXwKTvct0kWA==","shasum":"98d2a7f731182e7d9cca90183472736e4c659445","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.19.tgz","fileCount":220,"unpackedSize":225050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdklYYCRA9TVsSAnZWagAAn1kP/0HjWXpnUfFoMnzej1Ub\n/DQh9fNVSrYyfn34/bUtcYTgXbD1gsYA2HdAd7/2w+afPOTrIp5LcKAYQER4\nT/IfjMssyPpl64VynXYld10EC5vc35zJvz/Vr3VZfmuIU+n5Gub3Di7n2Eml\nFmxeHFYIWIpIHs90GE92QT46TyMO1Po/xI4x2JjSU/syYd8LxsC4BMansTP6\n+LLXRaxKJh7+HHPBQdf26fVG1zTcJ12+HGuTYNFkwLTbaijCe8qYnMdoM0AJ\nSV56LZviztWUve+LKf4z1hCCE5nIn3LMBYEoCwaLnfSJxOavpUuuA8MsHkJK\ng+0cOXZWqJXw28ku/ed1bgl25UOLY30GkqHG4TUulilapRXuu2V0EnQzKx6K\nbvAhvSSVsimURXsCF63PlqME94epvpRwgysWEsn9/WJ/sY28xmIQqvsNY8FS\nXYsHh1Gr5KaclgbNJQB50Ws1tardRlTFPdZWmAmJmIjtn80t1gI63GMsLQmU\naS3I0Pmr5KxuGiGUxv+BCTMFv801qS/CMkkBi8n6dLs615NfJFSRUwv3Ss9x\ndA5ob1GGNLcPKNd1vRJzJuo8Hh8Rpr+MYmhv/mp99fN3UmwDb0Lp33w0ckzU\nwW0yTEqCi0+IU+07h9T55C7zEjjBZG9VSILp8j7BXOHSPa0aggGuVu/f0uVZ\nXzOI\r\n=WQ0T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXkxGNXXg7uKaP7onfyRPh7gENkxmguTeQYxnAVsydIwIhANXfLEukwtUce77y+eHhDYGpStUIEg2Y3ZS+F/KVTKbS"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.19_1569871383360_0.6127772388684902"},"_hasShrinkwrap":false},"4.7.22-test.1569935284505":{"name":"ts-toolbelt","version":"4.7.22-test.1569935284505","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a669d3eb92db8d35c8354285e07b5a4236e12985","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.22-test.1569935284505","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wAypoQy6iDvUZPX2BA/cIqgpP2+ohEhnXYusALn2r3VxbZ84wxN8AuVqS9B6oJmxhhxPeryTypjCpsdsCIs6rw==","shasum":"36ddfc1e3aa09183196af0e9387f1f2af02eac1b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.22-test.1569935284505.tgz","fileCount":219,"unpackedSize":225661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk0+9CRA9TVsSAnZWagAAp/sP/Ap4gl3McgQfsR/FRFKN\nh14o9sQd/wWNR/lO4/P3A415S50ROcMKlZyUE2wCFBXvF+adX5fHfgO5Ig7Q\nT1kXayNpYgTVAHEaym35g4eLY6ocxt4XttZtMU9JZOVgox+taQgNMs1iQyM6\nMLvWQR8x6J1UOJXrh3w9maQvsb7cWF9eVwe4rNkABMU1B2abUxXNiqqEtR5j\nBczFkcv0wJAaYXvN5XI169LvkS0z0WhbMhT7q5/431j0IN8Iavob0kbw2IfI\nz2rzWJihws6qrbMWq2EQWCvolgHQoMoqpL9OXcM/YZJfRC8h/6ZNvF4TL2n6\nbJ4Xzeghj295BoHUpLubRcnZdxaAa+whjk/xmWy+C+qT6a0W0Y1FJoCm16oK\nBTUjfSwzfGtDNODF2ob5pIHjhNJUJQlMRVsRVS5FNTY8KFzKZ3ILVqV5VmgU\nSngxVq/GW4HFwbKZXQleiINa5budhAKPjZJXJQC1H/FybBRo3xIYaSbYrlW3\nzAa6hLBsGndwlgKANJoF6wgwFpQ7v1FEhxlD8iMBuBFsUAb2HjP5hUxcyaOo\nb9zLn1fqTrRP0Pzl/dizBaV6FEPWnw9g3V2xneP2iPIcqj/qBIyjBCSBTego\nMdc94fApAiuXkVul4Io1NpTc6Toub1FKCXGI1PiS5aHBVr88sIJ7l9zJYYEp\nEcny\r\n=oirD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHIGvz6htsi3ChXxXqHRFBZvE9g2qRHIueS/lMy9naOVAiEA4i+qct4grwlMhg5zQrsX52kp0mv3EJFGAPqEnwx+uNA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.22-test.1569935284505_1569935292785_0.19105028662177892"},"_hasShrinkwrap":false},"4.7.22":{"name":"ts-toolbelt","version":"4.7.22","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a669d3eb92db8d35c8354285e07b5a4236e12985","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.22","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Buv9BQFgI3ID5Y6DOZZ4igYUjqk8WpWQHf7LcLjan9et8VCUSqIoK7BBeVeDQZR2qrpbwo+TYR+WbvUaB3lP7Q==","shasum":"aa618d30504f7e99cd9e5898b027eb734b73ac20","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.22.tgz","fileCount":220,"unpackedSize":225642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk1C+CRA9TVsSAnZWagAAGN0P/0OfDCrdAICSDV81lDvD\nSh2Jr6CN+qdocub72EoRm7AJZw4WmM5MZrXg5VKzgc2LfSXULiF4qpEnp9Jj\nUyvUkhIsvBaz8kdyJoI8MtzRyk20nhQADMfypqKKCOASehPbdGt3I/GY6hDr\nbB7gh1imSLx86cAXx9bpdDpyEWQacZPgy3yAaOM+OLBdzqhXP0N726CfcNc5\n9NTqzF+8ZPKXKvI+yxh25crz+bijEmGmqLEAw26gXcWb8DjtsmRnezlOIMsE\nUvb9ZWTHmwHC99HTPFDth75tjuJdBVzLlgvgj1OvI/J/Qi7hIsmNpdUsT/Q+\n+zcv7swD7KCXGarXRls+FCmhWbjBjYDyzk5tzsUT0zrzeG8naF33Zv82W0Jx\ncO5gm1uoicay9g/BG8aXTgxF/wUx+6l50HQFm+nHYRn7ph4zcQEvCGqn6obM\nBmmbcOMPSNTQBQ1qPu+1DcP2XeQCJs7eZje3B0svBKmZXiuP3QmL/2fiMoA5\nlTnbtWdfmX2d2A2Fao3YfgBFXvLYPaf3JnPvyhVofxtCZ99C/ShryOQIQiUA\nr0uXdnD7/YDmxXuBoyyZKH3WZZy7/IgnsPmn/MQEqURzSdzE9reM4uT/p0vQ\nGFQKbPIgUmYJByjbueoofQh3lyNsXPd3T957fPSp7COe19rdi+FUlrbYkPqQ\nWU2x\r\n=s9ER\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2kzCvwWHbODIBDNb8h61ZHovsufQB6RJv98PG/3GtLgIhAPJKvDIdZOKcc+5rUw1XLN8DVM0DKXbDQ51WP0UzDYQw"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.22_1569935550042_0.40632185029584944"},"_hasShrinkwrap":false},"4.7.23-test.1569937070801":{"name":"ts-toolbelt","version":"4.7.23-test.1569937070801","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0c35336e383cc15a07422472c6b88f4d4837c59b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **175** tested types. This makes it the biggest type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at version 3.5\n\n```sh\nnpm install typescript@^3.5.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the\n[contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.23-test.1569937070801","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-e8j35l60/k+6hMgWKN+bD5nVoom94inZJe3HS2G+JPNyMi3BuIMUjU7Y9OJzvZh5RNED+BQBZt+Hg7V8+oCncA==","shasum":"fc1943f21af3a36b4f97e5672771ffc4bd6f0431","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.23-test.1569937070801.tgz","fileCount":219,"unpackedSize":225809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk1a3CRA9TVsSAnZWagAA7MEP/0WGetp9e6fWVtNcG7C1\n8iKNbVVUKbUwrVzFyelmNeV7aQ1L9+vuKL5p68KSFC3cgDPs//uFZk3NbGQM\n/XQrEmpexsrDbpZUCmqRNOSOs45Vq4QxWs3BELLDEMZatNQhYVbxQVCjBRpi\narkGOq01yWIGUSnuHzPnB/+IAhSRWO0cqNRjUtFpy5g56xY5YA4X99KHCCux\ncCWffgG8rgA3IsfA7nVEcBCVdTxpxVoY5oDlqUSvlHYlUaXTznY4dPC+zaX4\nH0QyBWD5gjkqQhe7kR6xusY2gKJN2usFYi6v8CE/15YDd87s+YWvGUvEsmD/\n4TIWt5F/ChX4GshfTyV5m5B+A5rT8qyuOz45g2gHQCs0vpU13Wcm3+5kYebr\nLsHtfAfSQeehbtGn6wcq/siN43EFjtnmFkkcas+/KLdMQx+AEyDAWgtSr9P7\nwTAbdFWb2DWyQutVp86AEYRMxiyZbOAILlpsgpS4XtgziBY7VOkq07P9aDMm\n9nRtz/MU20I/ADtK0ay3JoY9ABZLcuWe3FyusadHP65ycjYHcCMvZtyG1fBA\nHPpT1r1TZU0H4vLQi8s4U3tVMugR1GmI20dHYaQeminjqzjlyiCLKIA72X3D\nWwFxBcdTJiebSo0V/TQSJEhd7uGPVmAGMBAab/bhFSbUUVvQFFwIYYfMySP0\n807b\r\n=S7su\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFU/pho78Jz8MTPAiuVspBmPZIU570HWCgPWAZ4o6HqAiAfoITQM6I6s/1sDh29TzW2M0zU3gigP2axbK5Go4mlPw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.23-test.1569937070801_1569937079050_0.6066938089669522"},"_hasShrinkwrap":false},"4.7.23":{"name":"ts-toolbelt","version":"4.7.23","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0c35336e383cc15a07422472c6b88f4d4837c59b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.23","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-DfHWVhBNm8oVsPM8ZQ13VG18WKLk8+fgQm3ZC3nzuKJSDVXWFlJrQUboy5eIhYlM2EUZDagcDvX9MGzZi7VAPg==","shasum":"943e00397a0d6ac5083f23d795d2a2db73eeaefc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.23.tgz","fileCount":220,"unpackedSize":225790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk1esCRA9TVsSAnZWagAAq38QAKH8d23pgF9wIr8ZaDp7\nB3QIcJpzSedgOCaQ5hsA2nw9RUtUBE61Lv3ufJz8qsHSuMmzoqwGq9H9Hfch\nOUFoRTgD0kjjYDAE1bMV42Jd1yLBeeTrfTnUgTBLVU717okYskDEQ5SXQUtN\nPyDkGCCFFjjrSgCK0JYTVQg1aPF8lz8C8/SL3WJw3IEgDddig7163usHMmcO\n/NucdoUyFaR0QZZ8LHXsMolfNXAJb5r4YqaBB4meFtJfCRzxdwmZu3jeb0C4\n9xR93VTjwN1xBR0Xl13H8s6EROgDOX5wJ+TcPPlzQTAgbILfPbigraAxqxqn\nhSGiYmGTC+Qn9svCeQYxFqnqhCTWjUE/GzVZ9jg+5OmHwFLiNKFqqaXzXlMq\ntwg2jhyGZWBIFcq6SHsCd09EdA7qVFYJLZ8GpNi0T92PkpevESKR57xtcZ6Y\nwEVpj4llArpP/yd5a0k0RRoMoJgPqOAy5bAlSAGDeVV+JpAcU0KL74kIIQqd\nH3hHLxSz+MUP8lAI5K95YMpiISLZ2EbpNhf/FUMLJM/y/oD4JSeLkGkgQH4y\nrWfkUPDUs0YkWtQ0azFv871QghwFqvJV6bVnH15fWd/qsRBJVQuu0ZJAsYkt\nYWM9HCDUVFOCfLiOYe21QzqeQnT0hbKTeXiZuUgofMXmbyqXadvlcRPWuOtP\nZyJd\r\n=QNmR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDa2ZdPSoVQxxuJV8g6ZLsgdlbZDuVrAF1MjzH1p99FnQIhAK8Ns6Hr7PtNWPlkRVst1QkSj1EHb6Qoxg5vnH6Mn3oc"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.23_1569937323847_0.6707341979062433"},"_hasShrinkwrap":false},"4.7.24-test.1569960373309":{"name":"ts-toolbelt","version":"4.7.24-test.1569960373309","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0bff7551451c4e12d3779268e68185bcf96eaae2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.24-test.1569960373309","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9xkInLImrZrwofb7BFV5pd2Q4h7ond3Ey6d8eHb8WHV7BFa1fzQbh6crpgJwUUCoyqcCHz7qup/xPdI90XmN+A==","shasum":"6b4b20a9d11a99df4b3f14400671a19835dc69fc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.24-test.1569960373309.tgz","fileCount":219,"unpackedSize":226006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk7G+CRA9TVsSAnZWagAAOEwP/jcIwqGW4KSbr9INdDPh\nVcmhcycQfP+UWR157kp8C/2rbW7GEDLq8j1uwgziD8YwQLYccQI9geAq8FCm\n3TGPI+5Ztsw+Q8SUCEJ6WAD8hlTzbkeULxPo1Fl4Y9Hvs1xyVsspZG6096AU\niFe5GsyUeKKy67h11Wdg3X09kF4ryE71A773NHTx1AcdSUKU/+LpnYSy4Mpx\n0Gg+7vrA7AydOyafujrpGT+QnzLHJXbPbCsRL8dmQIOe12nQgrXCcaYFThF9\ndIlx3383vo59zZbBxzwNfloNrUfmOBbQ1qqbTRdzAkMDpdaacExnZDN23W14\n9Y2v0nvjt8UGBmUoP8QeM8qgkjiZ7eKs3/Lg2TeFRf0DKw81f2//pf+A+qKY\nmWhcP1vcXdjBzf85uCEUI3w/5i8iOJ7tF/0rheNY3YXwGuvPE/ppV6EmjLRh\nNFlP/Dw/mPjBGPMvHklXDR0J+ChPEy9V6BvopWNAWLJ9PzqCaJ5ebeHaCp0s\nWMHw8M4Uk8Sx4HLCoudqDG3+Z0vEz1+hoazG8EVcQwnuxAkdv6W+v+N4ET72\nhM74uD8XRXxbwfJdavPoyJ6oQQdgnfZA8eNgMNx13MoZC1wF1UE9CxxovQlp\ngwd5DF4beK4pLfKoE8gBFr8S8w+vYhupKO8wAv635b6WAMHoDK2lDKG70K2g\nXjqf\r\n=+l/n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICqh1sabNA3LKD+JO4pLjhE6RJ7S2UxbdUBzItaJflHzAiBVp8mEBIOBKplbOrEfLPpvXARs9mHxTBYP1kkpsnbYfg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.24-test.1569960373309_1569960381561_0.06401475794517197"},"_hasShrinkwrap":false},"4.7.24":{"name":"ts-toolbelt","version":"4.7.24","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0bff7551451c4e12d3779268e68185bcf96eaae2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.24","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-jOnCkp4Yqa53CNonegmTCu7bhi9ame5iZNOZaby2wIvtgCGRKSxlr4j/7Qyabz02qY7ex4tviwj/t2irr305XQ==","shasum":"9e150a552bed3618c385d0fb276127937f473ff2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.24.tgz","fileCount":220,"unpackedSize":225987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk7K6CRA9TVsSAnZWagAAIboP+wXntXywzHlS9jDJhgk8\nBiTXStrfKhPBFOl31z1BYUS3DH23zn3IwDpV+OUIRIbVDNFUTySixCXL0Vi6\nOsly7HXAKVJitIHqtH3smUzOc6feZpJgmnrjNgffnZ/bAu/wZN1gz1+Owf29\nr5ZdctqyMcA+e/qPdRJK/EEJoyjrq9bjIIwLIPYtbs8lkjCTFqBELCR2a+H/\nvjfCaZ+5mdkdJAl5KFJm4qPJqdinVXII4myeVP0yZlzQ2HmRlvDauYw++ulb\n2OJ2a5WdF4nTCLR0s/1gjOFP/isiMOWZp5wDQOGldWcixewM5bya8lAiZTjI\n3IKfx4G+LcCS2rbMQ932mA2ON2vwJi3jPzsQUARsvRbzz1zOwamIjv6LWKml\ng8qFjMKzzUaJcyqOfsKoK/+xtNsnoEEBzEp8No/iypodSgdBwH4TFQH/9PDf\nv93Pen0eXaoTJ7//lE/6etSb/kkwHuIIMwh7WzL5vumHIlgNhJZWavjT64kt\nKfy0bmhc/QxVhf7dpL0MM7LRvPG/TTDzfdIKXcxy1qehIloUkxYGHzIyEjY9\nUatGqBga2DtXHHEgAEzwnDQIMfOsC2B3WszDcvBDaPfuFXcsj9ayifPS/SUv\neZ7X7XzuWI9da9nUmErhiEoESU6Nyk7IWvI3auZwDXyg45LCi4xdqHvBQZF9\njdIB\r\n=n+QR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm43XnvPG2lRlwB9w7sG5hrkuTIvboCZOtDfNUIZv9VQIgX0rB+AJU5mdj59SVtblf83/ELUURQUVHUmOWK3yK0XM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.24_1569960634212_0.414633203606793"},"_hasShrinkwrap":false},"4.7.25-test.1570208606601":{"name":"ts-toolbelt","version":"4.7.25-test.1570208606601","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0999bd623ba91f883672f6a5cb3c8e0db0f25c66","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.7.25-test.1570208606601","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wvR8IPinwI1wxD5OH0mnEfco9brhIXLqlcvAHZa0u3mMeZkbqxqhHBE2W2cCerbgHNE7XC5g3gToZjcbQW4wPw==","shasum":"a1350634abad9c93f73c2775bc11a2ded6cef2f4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.7.25-test.1570208606601.tgz","fileCount":219,"unpackedSize":226317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdl3tnCRA9TVsSAnZWagAAwrgP+wRxRq2eunxWXXcUtrDK\nji8w/C+y2cKOCCnYmAid0ddomq/tismHgV6+VTqj1aoKHOivqZEmVtotXtOG\nJH2xOA0VpyMeVptzgcG3K7rz26w0K1Zuk7+eNK5n11Ei0LBMs6z4s6FPg82W\nKLzKLrSgIlYhlqgHZNHFDfdwnd0IPU/CMN5jmI7aVK6/pBlIegc44Okf7XGI\nmPUMSh33DXkuGb7zau8JuAzbOkbzZtoZ13Svj2fEwwG1UbTdpZ/6b7ZrWTw3\n/Cv470G7cpPC0bEezfF6tBXajkQiJUvZAIux3/K+K6dQgaZjT3sgwuQTrwCC\nDXz45La+ntYQXUjymHIadfHpg+mCWNvmXj1YuGFNqhkURoq2+rRS4z7YA5ab\nTqASHfsoXxWr+xYHtHHLCS1kLGFkOjE75Yl1CenJg272MTYU+OLca7tWhDjT\nZQYNUkXs+redbYJKoX5DMlx88ZbkutGPZVLWXE6YO4VWLC6hFBb0tu9YunoA\nSnMYucv02mKWPuZoTytY9KqCiCAgabiRAo+jYfm8LCePYLenXkkKafYRWMge\nmykIC1tbRrhytRz4qg5/xN3UFeagyv64PY4Mp9oKacdwbs+tyPvX/yTNMq/0\nsFD8hJWpjusbSnJYEuqu2NulUorw8ophNXGpC4Cf7aVPPOtlf0s0YGQlNRbl\n36h9\r\n=PlaF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4H+w+L78vZyGbwVQ83qCFbCbm9xWXWZdYqO+lLtrMMAiAsg17n7+4uEWfeYusTU3naGyX/L8AYRePXd45EYa85Zg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.7.25-test.1570208606601_1570208614916_0.19834227108490987"},"_hasShrinkwrap":false},"4.8.0-test.1570211228917":{"name":"ts-toolbelt","version":"4.8.0-test.1570211228917","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4e4fe166c2bac5a125a2e8b17f5e67283c108bf2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.0-test.1570211228917","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-UOaXXvB1CMrczVdxpvqin1GDbpE4VTnSkwJUFjU6SP/crG0mrQ5GGwQve6fAzL+8PHWLqmhSjqVMcCiwgKic+w==","shasum":"2b17ec60549e102db63edc54822f47068dc316ef","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.0-test.1570211228917.tgz","fileCount":220,"unpackedSize":227744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdl4WlCRA9TVsSAnZWagAA58AP+gPoxvSsN/4MTb7C8Ph1\nk70a22ZtrjgeptLduua+c3PGkll6b3cV1AQhPJGs7aiOK8pN1v7amnxz0AUg\nLkHu341WsbiS12vDFlE9qXwMuYgYM+HTTuL0nnH5Je+3gftWPboM7gjikiXh\nKND4Pgl6ErEcwBPka+xW0Asa6ZZZLnBmF8iFXtY3nzmRpPqjGA1PzQjY6+ob\nXEkv96P3E1AXaJDHx8Ay50BeCZ5c/GMqXk9qz1asGOYOYvL3aYREDxSopxBX\nX85YAVQifBqq0PjJDt6kqoX6frri8g2BwgVWaMGzOsCUFbJbUDzzN2soTXHP\nDT9ICMfaKzSF6gBC9UlpNG7IFMpxznoO84WY8yOgfebjT939lywntZErPC1n\noMPadNyptGcvjG2p5mpjifeESsPBoubEKmr+oT2ZOYbRe4RXtrmaefElDFRN\nhK9NJShTeyT5aPmI/8naqJj6HYY1rJ+gVOFXeGx0dfxaO8h1l5mkWd5BJDBf\n84Juq3kiAs/X1+yW3rQ6sZSoQjP0ItHYrRAhgSmaLB/likcSP7cqJqzu1LI8\nA4mPlw/RK9r4G42w95bcpmp+dM9hhLYNPll/y7ReKKWs2TX67n9I0Z/rPX64\npd0cfsomj50MxAwVAs1Gw/TbiA+m+yWVX88FyCylVJig905sYXiRF/fUw6x6\nzAvB\r\n=eL95\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSqgp/SXPnkeE4ylCax5eKbitqqq/+/hlDx6EJxokbYwIgVkxj9kUMyijJEe3GG1TkWKuswmZbR1UZRlm1picviBI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.0-test.1570211228917_1570211237194_0.8763031374927253"},"_hasShrinkwrap":false},"4.8.0-test.1570212111518":{"name":"ts-toolbelt","version":"4.8.0-test.1570212111518","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4e4fe166c2bac5a125a2e8b17f5e67283c108bf2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.0-test.1570212111518","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-HNxcmJDEASJP4QeF7w8V2aS98lWKu3sAlJXt3KOB9z7JT69lXs+ADsBThWM4fFEBxJufdiPG8X+sQUwpr6/erA==","shasum":"53a0b05a9ce28db379012f3b832bcee2af4c2081","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.0-test.1570212111518.tgz","fileCount":220,"unpackedSize":227744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdl4kYCRA9TVsSAnZWagAA3lMP/AvMn1eucfUpd+tqkYjk\nLlyikyA50pDPGUmDLLI/dvIfpimuIiDMPS1NbbXsMYGSNqzZCv5t8TacDW9E\nH4cXGMFUQCx9PyKWntynObaEwE/fJl4XLRXnrJTQl5K1ctZ+1wR01nNeIZLO\nblREzo/7sRC0wYlN1vKXqw7up7dglJbJTwX9lUypiQ1IhPM7/JoD7y20XaVF\nY+gkS+REi4mlgXYl4WE7dtNIQZTEBBLx1LjqeaFpxC+Dy3VaexoLZGsnc9HY\ntcRWYIXL8qEL0YhsgBkx4uqtrpXQoNUyQU2aR1lAQy70p/o3RNmAjemTHbE6\nOkVbaiszFzeVAsuJlQr6RDYmzchCxAiCikkCvHd1bhUH4PxBeUzHz+v8PXkO\nmH398ICjLOs83Hf1BpK14OLxrYbQx1owrs3erDRVj+JJuNQPfuOOVnYhf88e\nsHcQk7cHDveTfXky+OA/VIRSzQWSiWIY1FXgVSy3lMwhh7suEpQKr1fdV5oS\nmdxTV16vaJiBWV2zi6SnU0zPIYz9qrneOkTH5Z3neaEy9Ng2N+v11O3DQW7W\nbVKhZXioue82iE6IbDTuzFgpKj5zQebG5VfvxIwR13F0DmI5lo6PqrdWymRP\n3kklYvM5HdWlWI8NAFSsmD8wn93fZEe/zBaD2Davdles77a2G4A2g+EHzmij\nVf+m\r\n=9p5z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzRgde1ir12OBO9ZNulNfSyIfMr5wvXezQPsLIgecm6AiB7sHdz18CNjKWhTk2KtktKuMB3ngC6YR84lz3AGMhEoQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.0-test.1570212111518_1570212120065_0.8412815270242593"},"_hasShrinkwrap":false},"4.8.1-test.1570272979715":{"name":"ts-toolbelt","version":"4.8.1-test.1570272979715","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"943e241afb05f00ee235d3510d571b81dc03c099","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.1-test.1570272979715","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Y6qbhw76tsq4u+BSO54hTAAfNO2bgzDknuK6g32mL6d2Sv6V1EIHmOqDcieGM5xFg7NhYn2tYXuebtqJ8kxT8w==","shasum":"f9795a10b8c96318edac87d9d7d13eae5d981a08","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.1-test.1570272979715.tgz","fileCount":220,"unpackedSize":227951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmHbdCRA9TVsSAnZWagAARwgP/RQHW+991ZAl03w6HJp1\n+MF0kagMBKoI8ym1jGwS66MmvtuWwwEoc+HN2lDtPoGd3mPPUoIch3GnTbA+\nklgquAj0Z2COzETWOvrYcksp2F7IXnzL7R5Lvm2iYQ/1X2EcGze5zJ3YMeCp\ndZjROh5eiPMghTe8mXFyq5IXydHdi1j1cO0Z8yO82li9ORYBknH0EaF470r7\nLbvwEX8TyTQbJgjwb4CzBh/Ph8i8Hu68MwBAgbkM9BGcGSJvk3dwMbp+xfsb\ni0lBlpSZZlJagOTlhp6CYr8fa252rwewmgHwqBj1faQJjVhGh12mRxEAGWf+\ntXeT/pz+koCyuohrlsmFPJU4L/2DBBJkE2ny3jrXzTu85LGBwJCKGCcQ9cT/\nFtWmUY5bqmJ4srunn4XzkI4dmT/hlXc2vAP14Fg9165Xds3tiqanifIWtFms\nYCGG1Eb0JA2vCWg8xQPQPHWGk9owTcTVzrHMDSIKEXeKZgq4DIMM0t/nouJ/\nhj2oQJa8frdrpsEDWQ7eQsB/Md55oDL0Rct03Q45y+mIFJB7VB1rZsW1pGfV\nOOrLILI8wBeS3elO44DUwNhPCwfdmJ6cKsscBlyjuhXJDeGmV9POJRfLppTP\nngkcSPMMa080joeGrabT5R1+8H+gzBZFL6yHPVFGJ0vx8hvHM3OibZ7qF4D/\nfQ2C\r\n=22WA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXwdwEEvWsltdCkAY7d2ahb/oeqJPibVpNIp+WNC9PRwIhANtOc4xnYouKPXT0awnlqn3UhzvEYDTg+7LIse4ELohi"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.1-test.1570272979715_1570272988760_0.19232977939912765"},"_hasShrinkwrap":false},"4.8.1":{"name":"ts-toolbelt","version":"4.8.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"943e241afb05f00ee235d3510d571b81dc03c099","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-YzeDlHzyxsZxsuUbVoeXRu9/HAUcN1uRw9v62zxhfsGiEqtsHfQiDRhD+U6yAFvFh1RIh0SXyQ5EGSu02YbbhA==","shasum":"d391de80ff5d6a43b8d9cf8388e991e40378d616","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.1.tgz","fileCount":221,"unpackedSize":227932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmHfPCRA9TVsSAnZWagAAPkUP/2anKhQ3PRAwGIUxOOgl\npeMPNZFPrKJO+qmqKaJNTQ4inFuWOzmOddmnZL0c8BlxsdHqwWQJtQGxrVbq\n3ImF84PcX0z9ORHi21+pWYxEXYMwtrWl3hWrXFOPCyin/LER8x4oAm1NJYd0\nApKZMN7NNXdDPTQco211Zkn1kDHdsLYwE/Lfj/p+bwwkEMYi64EAoFPU0Oqb\nXPVCvItZm1xUeofgau9aSM70e7DT/pPU/gLE1vkpg4LEtsXEnkqPjgXGprx4\nfDdYGOtL59HkrExPmLSpVO5Kc+la4q3AhktuWPLwHxXCkyuSMHfw0CpIJg05\nYp+meTl3UQW8SOpE85K1x69k2+BTwVVmxDh+G2M0JFhv3jObdUlJLqo8ydw6\n7MctkoPZKp/Qmc8WmHxNl92vc+HJUfNstEKyUjy94CecC7NsJdnS8bPqyNvO\nkny3oqBpHB5cpApM74sHSMmSp7wUsbkyFDLqnpARmeVPRBOLGxcCOhJ9Be/D\nPCgp1f1iMv6ifSs7UulwD04FKdETiehaCq7jlDqk36LweVE3/+QW//qXt/ee\nYdK5/+MR9ZpQ3arJ8H8zxvyKMChFK7ecKNk2qdFxFfrQn8b2lCUvCrlBBlzK\ngslRdO/2YhwKukcVXazPIWU3YC0f396ZvI0+L34XXO1YB7KEJuCm+BnA3xfq\njJ78\r\n=8Gkh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWiin+6ilsrdY+I6emigUFJUI9omuGcChFRSTPGhj0sAiEAg8isHJNqBo8q54Soyi2AxQi5cKd12UqWuxj15WpbeeM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.1_1570273230321_0.9013757101434516"},"_hasShrinkwrap":false},"4.8.2-test.1570274259247":{"name":"ts-toolbelt","version":"4.8.2-test.1570274259247","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b5b3c36718f7bdb5dcdb530dd053c8db1a07ed3b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.2-test.1570274259247","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-FV5lKGXElL4deQ9Kn0+3t7aQ69LT/yZFQqtuqMv85uGUGpPpvhi5Hu/yHL28IZ3ZFiE49AKX66cl6U1P5BnEnA==","shasum":"ec7678ff0c4097d7a697f0acf154ba972ccdac5a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.2-test.1570274259247.tgz","fileCount":220,"unpackedSize":228771,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmHvcCRA9TVsSAnZWagAAnL8QAJh8cC3t/GEwJ/2ny0y1\nISWW/qNWEr56TqPMO8TqFVST5bKl7dJh4zU90HXLqiwM0OhBnftyRRWiRGyJ\nIGXMp2QihnI9CD7ehsDRLmrLkn39DBRiRHzIfDEjptOtKIdZUQ+XYwPfvct4\n7Bhce0E25ki0Yc9Y4WLF53XfmJWo72gynnNqWD56tzZoGFPc5Df/Sakv56ok\nPXcfdYE378LjUpsm2FCVVVjfSFEeZcg1Qi/wQ9cNqzaKLEJbK0RHiRiU9/B9\nhFdaEJoGsfXCJZ+CGDLyVbj2lTNef1HogncuEGCeEqmZo5Eh1CB01lwe0Khf\nE90oaPxjNoKgQM+0BRs5d9I3X9G05/lcu4yozdj46E4LdZOS1qmGGFd6lNf2\nz1SO3myLOX8Bx6YWk3gwxomY+IHH6VyUK7xZZfCx5eenakQuRSNDyh648Pgy\n1zxxAozI2CUjYwRKj0TAddv0Mz0wYdqmgyvM5GF7ewCrC1jrm6Azejyn6h2o\nBYk6mm8ndjJqhNk7Zg5ah7G86IGhrboWC+LWVCqm5T+mGoWND4xIU26Z9v6j\nL67NAnGN0113CEQaNElqG3tjlq9z+RS5Mz2yhee5ElRLXtsW4igJM+GavVK3\n6mlXjpidle03vKmahRt2PqjkzolDOwdHb2d9nGbNXUgDQFJdweWNl4mzbphJ\nkm2+\r\n=ygJo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQvcz10q30rXtDm3pzSKq9ZBMtdkDz28WIZA+MncAnNAIgWBseTvLRPdM2V9M0j4SG9rzgdAyaZUMNL2N06fYG1J0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.2-test.1570274259247_1570274267833_0.3699521906061487"},"_hasShrinkwrap":false},"4.8.2":{"name":"ts-toolbelt","version":"4.8.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b5b3c36718f7bdb5dcdb530dd053c8db1a07ed3b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xXMF1sxQuJSsL+joaINZf6TxvQCSo/0VkFP75p0XP4asUSfX4g40kRUayeMHWAhFBUBPc6LeJ23fWaXqAv6/4A==","shasum":"c9e592298d2ac317318aa6c8bd4e2600d906ddcc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.2.tgz","fileCount":221,"unpackedSize":228752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmHzPCRA9TVsSAnZWagAAgFIP/2InPB/zGah+kyRG1EbM\nj5a4CUctM496Ms2tcN5pkaEEmM+qFfItCo4SWY1KAf2H0As4WtqH1WQqT74h\nkX2VUvONnWNLNj+ujhpZb7zW5bQhmlpaIJRyNUekroWY7I9JZ4NoW6acf5cd\nMSDMG8stHuh+9fBhn2INoj0TBILQpY433rnytL9ueNkWGG0J5EXNHWTl6Y6H\nMmJp65Fq30wZwbXPhuDx7sFnbERaoUdPjFMdDKlmGbgqGBi2RMg5VuTI5azN\n2+H3OoXoO8ODPOvBqD4Qh9xRqoKqD7IT9R4rf1cDUP5C3nb172guqQsxGTYV\n4oTp82boFr6Aenz3vONFwgBKNorfIi/yAE9VJO+0Wku5yryyM4hJfcG7oALs\nBEA/I1lDCA9jZJOt3Rwbl75lq/SFV+EDYI7NIE0HsOYwDKssMNwR7U9BlGgy\n6hdfAKAuL3eBdwUu3987kjwdXPh0geYe2MRcuyzNpw8Ml1DwAtr1u8VEtWul\nvXhFv1NGbbBN1RFYHZ4R9KFJSOJadG43FHsyfzmrHNUCrKmxumgnYNla4lPS\nrTbt93zJDhPfFBWyRifid2V7HLMJSFawgTJ01gKNJYqz/gdMF3mcXWa9eBzA\noQNqR+FOLg8wfglLXGyRPTsNwgKBi5a8QYBaOD9Pkenka9Y/dGurDgSdjwTj\nV5Pr\r\n=zi6V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrgudvfhPDMyiJEHnXVc/V8zwhwwu0l7EQDK4QPGSyrgIhANsntcgTJVTMxQxCU2lzye7Kl4ONIQf51Tbvw2i+npuP"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.2_1570274510360_0.8379108935480124"},"_hasShrinkwrap":false},"4.8.3-test.1570275932553":{"name":"ts-toolbelt","version":"4.8.3-test.1570275932553","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a4066a5f45ab65a418c9866c275ad0b76fddf8a4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.3-test.1570275932553","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-d3ylloWWMgl9VXwQWMUkWTJ7qrJg1GYJoS++yNmYrxe5CE0wFxMlm2zcV7vC7Skyr2OeGav+X6ZpwXpdEO7QmA==","shasum":"6abc799a20eff8db2035efca596abe377c6672a5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.3-test.1570275932553.tgz","fileCount":220,"unpackedSize":231486,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmIJmCRA9TVsSAnZWagAALC0P/32t9ts0lRDF9YeA4xL/\nzWznSayl5rLJFOs77upNQpQC2YEYBfmMq6qXlYp4glV6p4hvB5sWihosu5fR\n6eHm9Lj+cUp/zP81udxz31mSXkrqPz4Cp2H2Xbn3C7jaAuXyakvS2jxF46v3\nquRs+3Pjls/OcRVYUcMG00AXGJS9/dUPGQ87/4/0PmqlsDB+bBfstrXRG9lx\nOTWL9YvVxrQKalboGpWPzJpYhr3XhCqRQa19rqTfg9U5eN86s0EGnGOvr6vw\nQgMw972BApITUm1S7+2/MAYSSTFFz4vxKbzCfvo4Wi5eo5bdjVntVrOc+y+j\n5N4BLNqYRpUnqnNEry08MSbReQRnOB8WZwRiyTj5HeSw1m6AJEENhlVgGt+H\nc9RjWYR7FdQQ4Q8WcR01mpsOtMoi889WgdeRbQ117q18Bl/OPIOiRdE/yF0H\ni88dyYOOvvOOB0rE6rU/E9moE5PgZHSvW5TxVph4L4+IlURIDlDM8FIyJfyq\n4OmeqvM2fDYEfzUCcCk58+rcZdprpcnE416jZqoBMrtbZRB5KJgGNYbrtWKw\nCOxLyQFWcFYedZnWUYG/2yoKQEXYW1AvrmR5mtBQ0hQA7BX4cVgQWJF0a/9X\nVxRqDMuqRYq7qGrlgdsPDi8/HHdiKZsSJwH3uA1G+ZVk4kuJmXMiylwtDASg\naEyH\r\n=yU9L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCr72h7520Xccf9gVB4LPte2Fb4mYEWvO4FTjAQVJpmtwIgTxwM6BdbkDesEUHJXqtWBHRYg8cp9f7cpDdiy6OyksY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.3-test.1570275932553_1570275941858_0.19585820198553927"},"_hasShrinkwrap":false},"4.8.3":{"name":"ts-toolbelt","version":"4.8.3","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a4066a5f45ab65a418c9866c275ad0b76fddf8a4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qSC/t6vfUPqVMkH7wQmRwYbShubAJufUoUynJj8e+AlSXK3+M6rC/OnQ+Mdw6Qd/WYTf46QZDM8nUhxYVJTIPw==","shasum":"f0b4f94faf3a58f3f77c470a4b8e447a7adbc40f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.3.tgz","fileCount":221,"unpackedSize":231467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmINdCRA9TVsSAnZWagAA6rgQAIX7U49vCL3G48ewykI4\n5nuNDoG7wpMtTT2XkqN6XAt2xUtQ/xWHPQXzDFSCewO/Vt7dUsfhRVgcsF5T\nouBj9zGDcr1gw4BzNr4DW4CihEj55S6e48zMs0JcEmXKmlElnksMJDoY+mtJ\nANq7IReiia6W/V6yD7kjRSr77FsCuR4JRLxM1kz/3sHij2selGNC90M3X6I5\nC4kGfHOBAnITb01wGU/FtrSqWwUtlPPko6C5wHyqYr45mj4wMROMDGmRATvT\ngQhuOCQ/3j0YniAJ1wEYDkJiMQRfnJLVezqYR5YgE9Dj6UUz8kPNXa5DDUat\n292sAlQTfaNJgxhAfe/dLj3Azw+RgPKc3SGqInWOwKBeVY7eky5nPJW+TtrW\ndRtxmT1fm/hp1FRvhEQS6W14tqHaxKz+XKc7ThXFCZyeB0AE+iNTBrQslqJN\nH8Z6kAiwjL6L4E0xlRYuuI1Vb0vQiYK1KtnOYZ2UAN63cNLo3Ue+w96mRQtO\nosgvNjUXtXPOY4hCCVh4H4rNnNpF13RATXmeh82H2TLzE/LzyMWOC2tOzVdt\n4Z+lRhsw3gT0zRxQQcaOH1EKVHr6JjiWWlv6Su3hkoMXPAIn/XYidseoM27/\nE3eggCIyw0rZWq7kGaKpwGMTMfc7RhSGrGGWSnpC8xJmywFla7T3jh12L46t\nb0iN\r\n=H/x4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyZE9JCMbaac1RauxvofGnYp5fHVTnAKW3EoPArWeKlwIgS0GVb+RYCpyFP0c4rJGt4ZkXWul6f4roq30NYFzoigI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.3_1570276188748_0.8797340671812728"},"_hasShrinkwrap":false},"4.8.4-test.1570299788466":{"name":"ts-toolbelt","version":"4.8.4-test.1570299788466","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"63ab634e0797b730e8ef71bc67962dc5345a4e61","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.4-test.1570299788466","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-TFGIH/mRY+ukbceV/praqkvRUSvsvME/SEChj80X14jkEIt79M2vPRlKSBTLzX6T1sqsPPyQMLK55gueWO0mVw==","shasum":"6753c52a96d83608a2ebafabaaced5878b3f6203","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.4-test.1570299788466.tgz","fileCount":220,"unpackedSize":231643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmN+WCRA9TVsSAnZWagAAJYoP/2F/BSXGfXgZsVt9od1C\neEntRtKBn7DcNI4Vx658wSTo1r42p6N9SSNRx8XMVrNNYPNEQXx04tqFSAK4\nWZj9+IT1d03uNpleebnojm6+Pt1srSeuji06bjRCpBSNlysKWlCnHBH3yNFI\nW1LqJmCEA8x8RA7LGag9o+2hbW0Ha6+DPa+lLQJ0W95Lwk/8Y0XnLfQKFJS9\nS2QBnkmPi7z8amZQ7rNQq5G+yHOcVk0NJizZwDds+q2QrBhlXQa9dNCmcYV4\nwSzONdvIVnOf5vR1e1XImvVpugpYQbJq8sWWxcvfMTC1ofVqQdn4owJn7up3\nETEh5DbQpa9WzqgPex13Q5HxFhF9cYVHrqa0dWdryMCbc7sgAq+LvOj5Wpad\nKOBggEQ3iH3cDnIurserFtG85dPNQQvkHCwCdBtoEpdLV3cXFqBJVV5r1FQI\nHweVgsx/fKW8HvJgduCLz+i3quIfHhsfVFQ6zKlWM2cF7BjSRNSoJQhGPqPV\nh+IKjDE/O2Lzc1187Lmi7siIVvyL9MuWNHYagpmARR6cmKT20uc3ViEnklEM\negO+yRMOFBc0Gp9rPboJ5ykFd6+wxn+qn0j2NTrP6CXryUHE841d4JrYjRTM\nSoLALJsAimW5Quabb7C5Nl7aeTYffFl7wrv4pIUGcWoEdAdOrTHM8icCGl/B\noUcq\r\n=BM7x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDL0GSbZMhtkSYVDAXzjcGgKpi+OXB3RIs2NhduI3za9QIhANURN2hB6VoO3ogMiwpkGtv/49jdo9FpK5ETSgUE67dP"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.4-test.1570299788466_1570299797340_0.5169628675610733"},"_hasShrinkwrap":false},"4.8.4":{"name":"ts-toolbelt","version":"4.8.4","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"63ab634e0797b730e8ef71bc67962dc5345a4e61","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Ih+y5GEsOlYugftG+Bk8ocE2bfobbSiJGGWeds4v+M3pEh/2QivzrU0VY6D3lztpv7OHYQ521xHVi8pZmJYBbA==","shasum":"110b13a6803c020c66345b6105e2208620069040","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.4.tgz","fileCount":221,"unpackedSize":231624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmOCDCRA9TVsSAnZWagAAb5QQAJbmJeCilhjZpn718uRR\n1jOBsiAep8d1GfBKhhu4CF547x/RfrNL8ZnuPUQY+v/0SWM769S0kNgfXBSo\n/8ulku6XxoVh/66Jvl8UkMkN30L/iYhzqf5bR+Lfix/sm2o2LO1lBReqacPG\nFuq5SpnaTtF1IviXJuiFEzpWl6mQgKQLqCGTHEWLrygCl7ZE8vNbxDFiH4Yr\nFZwYSFHAQBvG3zTA0mtiRhnMT3LAzuwROWJphW2n19GrPsxNmFwFY/qFW3Bd\nGxo4bmS3tfZmI6FA45Ji0PQoLyiF9KPssm9XTOIjVGN151b5YKo93n/KGF8A\nPgPQwJCfk9aMTPiXWJtvJJ6N2Xnzz5Z7pzfbua4LN095GVND9stLh+5SjGd9\nP1ivKpSBRJZck1A8sw7cPVjyOWrLVLYLztAF5fuy/csdfYcqLvQj0u6Oi4c4\nSs4eE31I984WUtSB7cXWY9/553Ota7b3zaeejuBa+cmI952989q/0EBqkdV2\nNY59jnevkILqLKuhYb26oRC8q3ezJaGPtuNJuTLvim8HUxzdR2/hFvC7Bxl8\neLUFH1g+nJ0pNBsxItQ5JdAaSbSDHP/4KQKnzVmo6h8EkvmNy7G9/dWkWQjI\ncW+OmsZYvnOgo52kGm/a9aaGahXqqN8GpBH/oOwF5IUImHFWbytOo18jYzhx\n1oOF\r\n=Mh9J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAX8U1pTdBWu3vPSSCIJV/fKNvaq58IaZebVD7XfdSoIAiEA5uN0Q+v0T0wOTgmGmnxcR9Pucln3m1qbOywlUfAEH3w="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.4_1570300034295_0.2626084504281183"},"_hasShrinkwrap":false},"4.8.5-test.1570494874113":{"name":"ts-toolbelt","version":"4.8.5-test.1570494874113","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4e990276bb498b13e7f45b3d7b45a09dfc87ed89","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    👷 All the types you need for TypeScript\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.5-test.1570494874113","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-M+XiRIl6HfcOgDybYN544yrVJrf1+/TIaOVhg/Np7SXGQeONbPA00lHi49jU0ldkfyxI/heFFCOZP0oceJtsHQ==","shasum":"6dd00bf3551d6c7b7e08f07572db48249316e42e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.5-test.1570494874113.tgz","fileCount":220,"unpackedSize":231951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdm9mlCRA9TVsSAnZWagAAZa0P/i+5SYw5Qpb/uNdOKMYa\nhtgTwNAPwgnkeqaal2C7ZkPhqxflTfYO1q4Ssc1RxwuGsOHR2Z0qIGwqtUbG\nqSm3giM9JGdYkOLUrZqXw2rdFod+5zMvlULygPlTRshjdd9B1Z6g31pppjSN\nKtw/WWnV/xO/puyasF8xsZCg7o8O2y3yoOoFwmlBB/E/pdpd/RbAdlJVjyXu\nFxNnBonBkVUDx7RT0TtwtdRrLgIqjjgaq/Oz8zpFhJLu/kFUCcFw8YoCbFUe\nzRUMr32sOdgvBszT3ZXknnfOWEazpsXqz2aTDm06IgtIbF6Qng9EZj8UFKZk\nkFcchuPGhfI3HVuqdHJIpyV3CtYLwynPlT91QuCAWoMwuN6QnV1OGYMXA+GH\ngP5GxMFm5yfUhe4EwAQDqnYFWXQEOiK8qchqnVN9zhKCdu7PrLWOf3IyHl/S\nPJlTcwJ5FnJgATVnyGZ8Xp54BYRzB61IKxEvXkprbEaB/68YNgOaU0yGYWPn\n9npalWa90ClB+GXoCRp8IC7Zj7+gWmUs7Cb5drgOhTBH/GiOf02WM81z/HSM\nV86MP1DvLkuLDbnT9GA5KS4lRWPnZ+MwWeH64HPl0VQn4Q95ThWwWawo4Edy\ncFbbgUShT8fUpDilR7iuGRa+p1F8aK3704eOsDyUKbkuZ9ufluMhkuY0pmaR\nAHXN\r\n=mF3V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAqI9D2GTsCSeAuPbHn1q4hQ4ZMo824OlxuaG639Nl3vAiEA3ZlfuqH9O2ObdI3K8f0lCnIQOrbdqyo4h+a0aHiq8Vc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.5-test.1570494874113_1570494884801_0.11359999404954801"},"_hasShrinkwrap":false},"4.8.5":{"name":"ts-toolbelt","version":"4.8.5","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4e990276bb498b13e7f45b3d7b45a09dfc87ed89","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-dJ51lTGVAcf7aDMgqip34lGSd+TKLisaW7AF4B3bKxvgBKGfYl6PhYfk8eyHUKSui8r3e3lYnCKdeA40JO7FSQ==","shasum":"8714187fd16929e6d98dc89c878f0ef02c4f6abf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.5.tgz","fileCount":221,"unpackedSize":231932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdm9qNCRA9TVsSAnZWagAAsPcP/0LTt3tZl+DdIPe1g4tG\nxhrFS68jNppD0Tx8hegs/QX0pPy5yWc0EVpotNnoXopwzRw3SSN/tEsGBKJM\n1OA0yYL16LrnJ7ejXf2XaKh2wPqzKoGMlBxBfN1WYChSSEtPsloMCx9jMZ4Y\nugJwCNU4BhRaNpp2KX9VgAVQZPw2KIolNTRtFtQb5jWB77qjCfkW6pFyX7Ps\njw3YdeERFLvzWuwX4w/NWzfSfp4WjpmqshoLUB9Wu9k6Id74K0ra80nzw/4X\nlv9oH4M1ufoieY3Q4DJgX/T39OsVbiyOHx7bNweT86wLol+szP8vqPXN0sf7\nyUszbBzmHagVnl68Nzcfze0hvy/Ao6A2pI8YPegJxLXmjZtIUE0kPrhitWC6\noduO8ExFJP90orw3gK6UqOQZBfRHr44U3fw4L/uXlVeHIfekujc1ZpofcZTb\nVj9+ECD1JXuJdF7ZZ9Qna/Y7X0LUAqVqpuoFBy1KQ90+q6Og5B6zKtxTRJB4\nYkXlmg4jikVFV7XF8vAt9cclqn/cDsQvzTMitkc51uBR7OXAi46UqwfW+WND\nen2YuhXv73ZkEHQahaYSnRJ1rp0GoGcAq3BoNuhGP0jSL0lhXnkCfzaROtZM\nY1mwH6nEML11p+jtLMsliQMsZiyWXq7cgsfeUVfCzbtqJftYi7MT2IwFh/W8\njpMe\r\n=P6jW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNkCi3NOFMqLTODcrcGe1LVFeIs+Ase4ksrFkt1roOuAiEAk5UOHeSWBPmMnTn1rVkkBzM4d+ucV40sKq9MLrtr49M="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.5_1570495117098_0.5720128467132106"},"_hasShrinkwrap":false},"4.8.6-test.1570495714349":{"name":"ts-toolbelt","version":"4.8.6-test.1570495714349","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"6d84a87024933081ce60a947a8a8836abe03e1e2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>⚡ TypeScript, unleashed</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** completes TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.6-test.1570495714349","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-LX7DS7HsYzF8g9CftdisAXx+UB0HfC6Sh77u0V+7nF4D8FjijPorEe4YWST1EQD4L1FVaMtd4JUe+T/PP+gwgA==","shasum":"48243e38472a70e58faa2b35fadd70b04e8e967d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.6-test.1570495714349.tgz","fileCount":220,"unpackedSize":232123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdm9zrCRA9TVsSAnZWagAApaUQAJ4Y9+SQhZx3Z2kLcrcQ\nCLo162oxtQnbhZRVddcXoOcFkOYpHUMAJKSBAySPSDPepxskSPkZuxgmezao\nYdD3i+4wmlvEGOOUoBsPRdyU3E+jqlIruAQAD19v5bfRrjb3wIrnQP5lvWIz\nO55m/zBn+aMoQhlCgTolX97RWXLWl87z15RlbpmDReOipDg9NytVP4kAFq7k\n5bHTO6EnE/zsNoa8eb3yYlR63h4k4mOTJ3uPUpIDMTOZ8GrEUS1/vudPIazO\nIqfYzj8BqEW50kOgLSRTq7/zdne4lpJos5hVJXncQrk0wtZIYzFL5tiUh2R0\nkv/sKhv1EWNf9jcTL4zAfUe9PHc7oeeeP5azKibUF0nnGrWgd3lE6l/+Y0su\na5XwLjW4ZXAC8UlTAW/WwgcmAnnVrCxlfVXjEQ2wx2YDwsdrgVQgoBXnpzbo\ndvpdq5yewY9ERT099NBaB1oiu5bxLjr0pjVcybk1B6+nkTc8eCZ6qY9Q4OA8\nRzjGDAPVkpjqlza0zyuSQ3PcHvRg2g5beiwn8RIDlwhtSoEHzntEYfaePEgx\nyucmOu8Xi8cG+N/UUJS6IcEEqQSYjo2xLQi1LaweqsoqVF4gjYy0VDcDbTTx\ndPosPlnKDLNr/TZQ6+/nPS0Ydc+7Ww+BSl1col8YgiL23Q/8zlL+fzpHOYH5\nMAjA\r\n=xw7k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQv/XBDyvHRjb7sZYFyeAFugSYSLEpFjk7cUpmEYw1PgIhAJxUVG5LvWI2ufghNv3Wbw1Av0q3BqZ0r5fxVPlMrJp6"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.6-test.1570495714349_1570495722916_0.2795027904190428"},"_hasShrinkwrap":false},"4.8.6":{"name":"ts-toolbelt","version":"4.8.6","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"6d84a87024933081ce60a947a8a8836abe03e1e2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-KS7qU5BMhWOWkNpnNfPIkP1DLlZAwCMZU5rcMnH/2Y8qMQLEwpxje8kL1A43Z0MtnmuIBEeevBXAKbFxZ9VvCA==","shasum":"2686cdc79672d36f02496cacef017273ae4be88e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.6.tgz","fileCount":221,"unpackedSize":232104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdm94ACRA9TVsSAnZWagAAWhUP/A2QVtApoNWKbcUUAbCC\nI5UtZlDzgpO415fsypAivBfyLVUgRu6mCHA3SZUp2WTN2U4gnHNNBCQMWO4O\niYoHS6AsOyH6J8ARmP+EpNcKVLk+PHxzOkxVozZzdzhYswq4LikDLYpaEYLV\n/foBs+rv03SmnIdeTF27iph70RM2JA+4pspqJ14PK36QRm0snAyV80tz0pWU\nSeHXBV4ow30vdblpD7Zy9wRVZk6BlbvEE8jBSkNs9q1jwBao+7lEASiSokrc\nvB3CPG6njwo2EbRcX1v+bEYzk+YkAB+zzrpEwocUYTlPLZEdL2kgbn/fnCx+\ndz9ojgcE07bQ5X2ArwJsd1rOrJEyHPmKWwCwQF4tTUqcyXxlW2pWS/99qDbB\nBb9hKaj8ZDBZdMvVkXMWeplMKo2zrtXy7OJwsMgVPucWuT6kUn0FLBDdwHvr\nVQ6xL/xGme9U0Yb5yCQodBDVXfQYtEYvBkue2/WaLRiI50IUyI6LYPRtUC7J\nytut/Ab8pAdB5RzqGjNMdlheFn/YPSBjN1B4FASnqer+MOl0HoYOsSr2GdFy\nZuQHueIxE3IMmwMFZ6VlQIYw3D7jPLpmmUmeGFGe/MCRmWnsuTMmtV12DUdF\nfAdeIRbXPbH1SMk6jjMuVxwqGlMPFkU8xJQ5jGiEypTggF+o/9dAzdJsy3pY\nzgCA\r\n=JCgU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCh8elNmz1KpmcLs9LV23rzERbwkqFleaRZYXY86FHjwIgI65iIMNUcmo25+u7n/yxNaDBP3G+Xcnn2cOh/rSmvAY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.6_1570495999312_0.44659998564363734"},"_hasShrinkwrap":false},"4.8.7-test.1570527819452":{"name":"ts-toolbelt","version":"4.8.7-test.1570527819452","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"585431e3069d968e5f69d7ffddda92f1280f2f1f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>👷 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single, and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.7-test.1570527819452","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-O3Fcin9ZoNLpYwzdqjjaFYlGxId+yETz58ZIYkdVRoqnhf8kkdk1RAb4XmcbEg1unQIPyUJAq4fwLdg7vgoPBw==","shasum":"03f5e2ec57fe97f9d5c2d0fe4ad4d878622238c5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.7-test.1570527819452.tgz","fileCount":220,"unpackedSize":232511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFpUCRA9TVsSAnZWagAAfuEP/jLvn/+pfgHWj8HVc7Oz\nMnVYvipEOktgaDQ94cp/iEiIirBxJmN8/z2rQQ8V39+FGf2iUrBju0VgCnuH\nOwlmTIvBu2NPtEkXchBPgSym1L4cvJM8q3m4/PgejqjCsKhfR44TKi8bczXC\n9QMPda8az5Y8T3Hw4sfiWM9aIiByb/bd5WegIN5kqePAsNpS6Vh2Zz9qr5yg\n/CGGeKtNU/AFRwPll5PQZfL8KPd/9emGHFuq8iHRbO442cvyEXijmelCixfJ\nvcYGxyIEelPwffueui9+AjXX6FAaTkQS3lmO7VEvgwe4jUgK7OJmA/AxJNHk\nsiKdmFTEv1mzXA6E/wuPkkIzanSsbN82pVRnqUlkpTHuGWLiR+hfm9u8s18f\nbBDPjpb9qPInb72sX949ZijTK7S3kz6lVymQYKpc2FNm4VVYAzI5SMvuEkqR\nuHnhX34jh/jNkHHK05peBbObt0MhqTUcYSSgdNUTJYlefiW0a1/XQeCYast8\nlM7ZeqK8s1lqrRk8IcLPBujhedrADr0IL9TmAqdV0FA/jpei8mOC74IAY6GD\n3xs++LQtSueePW/JZSIqck3S9M3auoFPxh+orc3aIow1pB2/YRNjd+5H4Uh8\nAG+7bZ5mZNzgr3X++1jx7EqUMJSXpPzy6g+PYTGw6bGP+mJFF5QmXPNcbOfb\nXDeE\r\n=mHlO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCg+/lVvJ5X6exMf1Lh4iGYzJyaPdnWult2xh/lHkynVAIhAMAsIGDN/pn7EoAvQUQpB57FiKS2HKLZw+8yCgsXb1Nb"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.7-test.1570527819452_1570527827712_0.17076882493770928"},"_hasShrinkwrap":false},"4.8.8-test.1570528007615":{"name":"ts-toolbelt","version":"4.8.8-test.1570528007615","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3c58dc094e0bd091312118c21848d65c54d7cb1f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>👷 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.8-test.1570528007615","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/o+m3N91m3xI/2EMKZo03rs2dT6MUpc1usHukl6No7M/NlKLlqKObw5OlffsIf/sP7ajgrfR6wkG137/n4fjEw==","shasum":"82c0194f0da01c11a4c69ceefa67a3453527df11","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.8-test.1570528007615.tgz","fileCount":220,"unpackedSize":232692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFsRCRA9TVsSAnZWagAAuS4P/3s2AnDkf3oDMpU45URK\nJO8TESPgVsIiVm8XcTT20J9j6T/pdqQFMztgXv8tCsbLg4a0tzHAejr6pZ5w\nXuI/z7mLOZehcXM6ZGiKpjQOozUdaSdmgFpBJ4xi7tsDZhdENfvcVXCeTNPc\nqVCizH9Q5YBgyHi01s95+luR+YDTEFAowo8zYU1TVYlxxijhgDkzTut0n9bV\n02OUohHG1JyNyvcSxWNp/wMZLZP2UaTEvijQZQjhTtunroYm++gk2gTppuJK\npnRdnQSKDlU3xupLs34HU6o9YdFxombj6iLYbT0GZqx2yaFZdzONWx8PJLrP\nGwZYOLJnxcuEXw6SkDkH2uIGv8eRulKAdwGnICRyR61YvzA0+2epSgdpe3Aw\nJ158vwuqAviNwpFvDqpxUFBIBijEDdY2VSHh8sz6jxyJeGJurisqmTpJd8MM\nYP4uQ9tVXuHeyDyDOBneho2oANRrQGOb3T0izt7kCmfOX6zP3QRRmSa0myqe\n9siTEt73ZyfI9SLKfkFvqGOdcrNEZmCvj9gs4APH0vaC+28riJWciiK7W2Jo\n8HO/hHdZY8Bun2GPJdtSKtXq9rlYvilp4z6Ilq/qB3WeZzcTgDYNzOL2oP6X\npYN4UusNgrSS1Lo08k4oTOfGPj4wOwOL6UHGCmySQ/gwjWVLkQzpcDD9h89D\nS/QH\r\n=Dkd6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSaxtI46cRDydlYU4q1x6rqxZHMF0eZKLRYXMInPBG4AiEAmXiV+3A+zIqj2LDrFNJpdbh3g0S1WwkfVXq5GGMktaE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.8-test.1570528007615_1570528016870_0.8136248745457975"},"_hasShrinkwrap":false},"4.8.7":{"name":"ts-toolbelt","version":"4.8.7","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"585431e3069d968e5f69d7ffddda92f1280f2f1f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-i6tWB+BOcnqj2tHVv2qdkmf6nuvuUNzY3vowVn1x5cyVWov7z7+C4ILukfgJ5sMxoy+zawRuIhX91MSOI3jWuA==","shasum":"8353fd82ee01218f29dc312e5aeb5f76e6b4ae0f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.7.tgz","fileCount":221,"unpackedSize":232492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFtMCRA9TVsSAnZWagAAcXsP/jzcKeV9ovxW4H0cUT6M\nZyoEH4PZ7wwL/BGvMXomehqk9nVCUanczhTEEmVL4/DMZD9M1ohSXINCAUFw\n/W973H4O1lGdits2jhri2VM4RXwSloOzpaiBZKHbGttWxloHxXVM9cGkQMSJ\nXO9g6GRisK9XFYxCQWGv1FStxGa0qzOMcuMd7wRUYzHKFa/hs8aRN/KDicAJ\nbtsfn/kYmjWj4+OoXTHGunPe7vknkh3wGntrZ8gI+Sr9Y4UqaIEL6kV/zEn3\nN7/4Zliik1FXwaZA3WUwSfWRdPcO0wTvDvEXrwfsXE+eByLocGR5aWzEdBSt\nZX689Kp96lYqStIfsnpMW0A/0RYataTR2Rwve5uOTKkfp37TnRFizfIdRwVm\nMkyu3w48SuC4o6RXzOXysqgY2GLDzh0ygbsfC19BlYrLujMAQ6SDcnMGJOhi\n/lKm4XzqCmUHiWw0hfK+Eja04VmytZQtC3pA74YHQktT3RZCWEpFlb/JAl1Z\ntOyEabS/t4ilD80BbmC4+v+ux2xbzCitXaBOiCZIByDdIk0++GMa0X9WZVw+\nLYP2Goas5BC5qtt2nPZN8ALspokIHPPGhLFmKnaebSgd3HVk36fCBDq5RoJx\ngdFMGI/ROWkycaCifX0DGFG7d5ig8SCwmf+fxlSEC3dCZA6J4J1dg5RlFwWl\nX9bi\r\n=1NqO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7qCBaMcm/nNNBsfjyxGeVS1Ixb7sihh59uRiQUypJwQIhAKLhyDZyelsF58W/IB1RjU6bvGfuw/KKXdx8+ydbY1MH"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.7_1570528076025_0.35236772808033145"},"_hasShrinkwrap":false},"4.8.8":{"name":"ts-toolbelt","version":"4.8.8","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3c58dc094e0bd091312118c21848d65c54d7cb1f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.8","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5QLdemct/ssqyVgmEIK1KKY7Y39fX05kanAdnp+O529Jk7dFct+4kgasvMGXagBIvLCUviksDCZs2Lo2/fp6BQ==","shasum":"0ed56ab46cf0c12c11156076a68f1caf1fd9d55c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.8.tgz","fileCount":221,"unpackedSize":232673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFwKCRA9TVsSAnZWagAA+EgQAJTtK9FNMUnZ6RHLfhEA\nX/bDKby0D1/ESkbo/l87kezvhGDeMkUi8vYBNkmF/czQ6HYJeNe/DrQGphAg\nVhXVlsRkQZEBQi25t6K/Z8PbW2DwE14Fjrc3kwovXRZbWufm8+VxBAruPtIc\nsJLYiy+GKnRuq2SJ/90l3prWiAsliq0gYEY9skpqQSK1PvhID9//mODq12mn\nf7URaHW8sZAxMFpjUHE7vPekam15F/CpOW2xK7F/rjiqoSwa/iNNBbvJyB5q\nYXu1uW7lrxe6jhzJW0ziaEZ7GOWY8zf6oej5vHYBZVUBJDk2nk4hOm06rpIj\nizBnlBVlGBU6/L5ubtqyJ1vZW6zmkAyzQgAzVx0Dz1bKFAUDe0l1dQch0GQI\nNg97isqIQSx+l+ybiG70gpQfoUdrwtEnjxTt5gLH9hZMYs2aJ45OpFljSMD5\nZf67fLtEaYdF/KRBNjjNmjiEZDyrlyOceW9jhQzd1Fgyh9OTt70qRkQ10Jhb\nFiVdiC6BX6uU53hfjA8y83+ECujy3p1UXJaX1+DvgNEJLil9kMLcVRCR2Xdx\nHnZIiU18Ceu0zWUGdwTZT7Jvdqdn8jLpuzewZsnrIR6CM9Mf/WZr4yblk5IF\n91rkYqkzXfezBupqixqD7u3EnEL8eGGZfyr4ABpv7hYsaEbe2ADPkWTKdcc5\njWSv\r\n=YHwE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/4OJKw6gbndYnQOBN6ajRYe2nvCCAyywiAaAaUWJyQAIgObIGBmCG3aiB1DFQ+Lqvtrps/Jgf4nzWjwJV7yAttNE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.8_1570528265640_0.9743916760329818"},"_hasShrinkwrap":false},"4.8.8-test.1570645374000":{"name":"ts-toolbelt","version":"4.8.8-test.1570645374000","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.9","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"1042b1eef9b217573c9590b719cbe699bd2dc419","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.8-test.1570645374000","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-EaoEIj+nXcfUY8I1ahxlwMNsjjAFe90obYnNVAEel+QKfG8HyEjYULN82UxOkAqVlSSTlDVuKt878AJchWckIg==","shasum":"319a3d8534abdf6e2748513caf563c40e18ecc2e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.8-test.1570645374000.tgz","fileCount":220,"unpackedSize":232692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdniWHCRA9TVsSAnZWagAA7qgQAJca7KtwJuH8UWBuWpCn\nbaAcDR8xUxmbdnaTJxZZNXRecD4T3iuPAQZc47TPUyhV2/TAYkHAGWRsZxS8\nPXqe6pItDuUeQbqaS3t3GUDtPrO0zHBR5wKLAWz7RkIEHwa46QOY5klLKX1p\nLuFse3QFNNwTVofliWqFo317lSujXQAKMy/gzkYbb8T0y6T4CDkIh/OHogig\nlfeFn04HTCTmEw7eXCZwnES42I6PwhD96JlBqS+fDF6nzVVGpORvroetfuiZ\nGT32MMuSE8fk3or5rwZPTyk7n+Yi4COl0SCwUdSpI26iTqqGFASnJV1o4Fhk\nqD8GyPwr4YSJ8Aujxx0CLNoA5leg3BPtjrf0WA9p2RQ8qeK05W+Cplo9nNas\nU65goGxvPz/1AoAWcg0oEUF6pE5d/jTKz/nCn4YwLmCLd2AeYMqsMGgLimHv\nKpd+gSib7Q2v8pi0yvEX3R7HCY2MFQmOTHpNimVIKnY4qvFs6hqsh+9cC834\nOd6aKbyvhjrbIx7M4OL96vvkQZ8Xyfs2jmeNmTUoDgy/FAWuj2flRubA/nL7\nYrmuYMT4gLnzZ+hmFiG75gXpY9kH7svDGdrQtO07HYN5P3MOdJVUw9gesvkX\nLaPxcwyJtJMiL3Kcri1uGecURwfBWuR9RsVuE1F0gMWbXxEFHFCwmGXi7rTW\nH9Kx\r\n=TKBM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDEM4IS6LJWtAG2QTaS6scD+bpfDp5NWuY7gnvk/f/k3AiBhBEowrg8SwgQjID31IUjVHZfiAq/MYBvTc0s3723sNg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.8-test.1570645374000_1570645382398_0.36838832759204676"},"_hasShrinkwrap":false},"4.8.10-test.1570881991158":{"name":"ts-toolbelt","version":"4.8.10-test.1570881991158","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3a0396b958b362c2f4d42c58b48668436de9abde","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n// Wonder what these letters mean? Check the docs below\n\n// Merge two `object` together\ntype merge = O.Merge<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.10-test.1570881991158","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-BLstMfHdf1PfmH5NnHlVR09FnNJtdrYLeRmIZTaXy3oqOn6JVtuhGP6H2GXhwzUudDgSgmMP9TdWvcmajVkxng==","shasum":"5ed8d79b922ea60c6af3e891e52cbe69c8ecdd49","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.10-test.1570881991158.tgz","fileCount":220,"unpackedSize":233067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdocHQCRA9TVsSAnZWagAABEUQAISg6d9MotmbTSnXhpAx\nMrjW5EX3WUuWc4kIiTFXTQLo02FQ+H0Y4Fz63jBzA6NPcl3mZ8HqF34daljN\nt1tymKyDOW2VLpqeW1gbjioenqKOtpRBDhoyBqwWNLGEt9CjUTESm2EOUYdL\nkpYeq1H/WNLj2gPaqzUNmjyO7CFfj94ZfnlSf9ja/s8BEVKelObHmfVvXWPk\n7EZJR3G65QoYSCsKeNgc9TMVpPE5KZQcHBl/Gg6YwupH3PnHABmtTi1lKLNw\nKPwMQgW+k/Pomp7YNAXCUWMe4OC6WyeY1hWbW1kigwD07n7gId2jxRpHUUwm\nUB2S0jnmTaeJCe4BP+fGgqvP0sk+D5sM1a/kU0/KxsInRjHYBUySFSP2dXgY\nUmN7dQhAlLjMloEzslvTCrpVx+iUscG6wNXlBFFInMaiundo5/8sxqeZWnds\nrBIa9bQ7NyL+dTzF1hhBV/H9G8jNlP0tYMLwkhAETX6Kj10R5dgxkxKsJ79u\nNz1778jM8LMAnWsDf0BA6JsYdP/lwyELumUaS3WqH5yArodT4B4Ga3NR4ACd\nhfMdOFsu7JjpX9pRhaE5HivOmWo2Osc0JNfA6ayRh1hVnZpbkU3mXuSF8dV2\nAXvEEZXkveJ0hTIN6Rux7bnqaqHiFkcE/ApDoTAjn8yVFTDV5MwjCRpn+0sg\ntdjW\r\n=TITY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBX6/bBbU+V0K7erkzdkBe9XND+K4VFsvlmRH2s2k1LsAiEA/BNh/8woOybZTm06G2YZpZnd6deed7beAd3cNugAudM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.10-test.1570881991158_1570881999727_0.635142317781364"},"_hasShrinkwrap":false},"4.8.10":{"name":"ts-toolbelt","version":"4.8.10","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"3a0396b958b362c2f4d42c58b48668436de9abde","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.10","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ZiLTK8JKmHIqBzDZX40yuYSzznU8BUTtzszoZ4TGCmJkQe4DSwCOwHweCUYjUkeuhcCCZND4Z69LmqEoFnBgQA==","shasum":"ce3e0473e595238a7980c149938f27046d7a4b43","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.10.tgz","fileCount":221,"unpackedSize":233048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdocK6CRA9TVsSAnZWagAACYUP/iY6675MW1qZrQcRlSHi\nQxG2puMSY/8ny0jU7Yz3wLqjgRn9vwkUSAnWu+/QOOItEBoUAYRkXuvUxX56\nKc8vsRRCgsnJN7tZ0xmak7hl6nIlVjZbGZZugNPrhUSt/1rAo2gJnxoTPYA4\nwvSW/hXBaNSkLsJEe8MDC8zm5xVaqzhkrPkKT/XArhhGZRr7MyT9+MW1bCoh\nWi4Eu6zgfnLKkt8zf2sfnengB5LIBipBaNeptboS2PuXGB5d/oEYRqIQ2wnx\n8WpM2GhV+Y7nUjEMFvqWcIy4Oq5ANFbvZ4IzM/hQU08i86G81Dl52UWsq8Tc\nTnYnJEHcfe+3UDv7IPM6/I+rzbWmtnUpfRzhMC5+n7gl7IBhccXw20M3KWU5\nRKjMyS1cwY1u/a2d4KgAVp/YadkQninTuv7cZLjfXQJ1CHNqCDRe7Z3hC+Yd\nlZi/SSzZYft3RWooi+d0BEoSC/t9hGDOD+RWdZc7m+nA6vxEEgyl07g64hQn\nx3LlMYBr1sohujnltmngOQ2shKvEIAh9fMnWGt3qetkJxSMBlh5TDqRv/clY\nLC2lLNXjE8XoaK2vAdAwBnUL2rBqRraEfMkhhCf1PzRiYp8jyd0ua9js8QD+\nR+zck5EMt4hQNMiP3afb9OFK414zYqqq7dyMJfrAlm3Y/oj3zRJk+x0TAjgL\ntgeP\r\n=y3ym\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEKevj7+mYqf6UBhLoUxkCZYhGZwR9bdbKjQZ6GiHmmoAiEA1lC/mrTPuD667vO26uFIcOaGUjuusIbVF3rk/VD+c+s="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.10_1570882234130_0.6658971953657538"},"_hasShrinkwrap":false},"4.8.11-test.1570889658689":{"name":"ts-toolbelt","version":"4.8.11-test.1570889658689","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"1d79ddd1de02a4433568ccda787751faef45c3af","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.11-test.1570889658689","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-C51jzv1jg6/9uJUFlk+YfhDtrWNkZCBap8htUa731zEi2uNDTORXNmeF6kyFhYBqiduzGn/PoVANgFFeGu4H1Q==","shasum":"927ea4b94bfec41304d4ea2520fae45b2c62d5eb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.11-test.1570889658689.tgz","fileCount":220,"unpackedSize":233214,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdod/DCRA9TVsSAnZWagAAUrQP+wbvDVwiCo6UJgyGufvi\nYyQgw02R2qhENQ65HuNrK6BOx45RxUaoh8q4+YQjYnBo8uCs2ma025Uqt+hV\nUuBHaNIkvEimvrKaTH6aXRY2XYK+wWJBblmmEcii7LvF7elu+sxp1em4PAhC\no0/4B7l4oilup26mkfJvvzRD9Cos4/X4MAglodVABeG2uTGrl0/w5owlcAVh\nWKiwP5OYPEyfHhXPRo5eCWJn2M95Wi0m7SfNnFQH1w1kASdattAftqwSXdnO\n/tvVRwUb6X/p/1boH5WAkSZtmbx9CHFiFQe5WSuG1vtjao3eM0gr0fq+8iLn\nZmqw9wFtPDhuN5i/jUpA5ZiVT5ndFsXh1fRs0R1raJJYg5G4i5yfM9s1fM3w\nzSwTW4EsMyqo3UsacRdcHVwXIOKQ5Fr7ChPeAW7WVAGDdwN/ZAAysNAsC5mg\ngGfng+Cd+GX1jHBOlpF0PsRLGuJRRg0mYEncn6WVDUDtol0m/p4NJ7Qqoab7\na77yqXinty8SVAE1dTkscuk6PVrj90QROlfK7nUIv19Q7PXYVEVTCsAh36Kq\nOaT1ViQjVZJ5w1BKH/YKEW2dH+hRrcgwTYhWEzGgjboV5hVQTGeVCkNTHIhD\nD+rRhwL/B9dtdA19eleMKdZdxSEAjBCaoUagVnDy0HWJloFHkwqsigQ11Swc\n7OUs\r\n=T9wK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ8cd4SpIC6j0OELSFmIh00081MJVHuRWluHKHTKEH/gIgGUWd8YBlLKGXjgoDxBqZGu2ZsQWnJvzLOvzIoP+NH+Y="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.11-test.1570889658689_1570889667025_0.8713580902073734"},"_hasShrinkwrap":false},"4.8.11":{"name":"ts-toolbelt","version":"4.8.11","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"1d79ddd1de02a4433568ccda787751faef45c3af","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.11","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uY4x6BpOWnXwDtejARzFbqIrOOOJNQ98x+F3t34HBgERImXcQihgn3s/vtZPlRfL1FlvWIL6goT7FaT9uf4oFg==","shasum":"fd1355f8904d7b35bfe9d99469dcb99f520091e0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.11.tgz","fileCount":221,"unpackedSize":233195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoeC+CRA9TVsSAnZWagAAzCMP/2vUA82qhZ1NEbcvSW/n\no5Yjuj3/ONhoPFOMCiTCtzOTCR3eXmzYSavVcqU5ZLpt4ReBPXEMY7azNlZf\nV21WtlSYx/cQJhi7fBSxQj1Bq9EGmb9UrYpXK2BMaImudiXeioc09w/97MK1\nTFSa63Znv1vKaAbc/0JFcTnlx90Jc4yUHycc1mnQ3SkhcoPtKEaLxTGhSrbT\n0uGFzikFfX+BCW9168GunYrrvBWXR8torTpMfu/pMo0uxSxHm4ftY58FSn4Z\nogWxjkl8V6CYCZhhAYSw5mxpLFtmNuBzeE950nZvPWfjk/jb+Cj8TjDzthlE\nb2OfIvBiBRUDqSWvfLvt6+rRdt4kLftjn/nxhDF96qz+7HlmWftJdH2qLNvy\naP5ShCzFQuhsnRQNqyzPPfHxu66DYlcon9sUtTL929FVuBynzDuZANuHPc2o\n79AhFQaJLm/8nR9xHHjic3CogJa4nf3w34YKK0ZCVMP1nGKWx4diuS0Ifb2w\nysY+gK0L9FpkpAU+Ua5+GUofhHB0EKMDegdpYRjIf9yLhy/+3AjUm3muKgsh\nEMW/YiQt6nhmns3AIqiX8ROW+3f+wGuAaHBHaJ9yf3OM7oUnCgolIDInFs1Q\nNuHdnCCI5hCYQQkIIOMhqqo2JIVISrQE4gMmAQh9U1wk8+b/qu94s/bCdBqD\nmNW5\r\n=8laf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNsPpy20xzM903VbxxXV3RORHCNJ3ScdMnsw+/kDAmEQIga7R4uYxhckMIy26acFCuDaSGE89Mmu+p79Sipy3/bOE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.11_1570889917424_0.07786662063224736"},"_hasShrinkwrap":false},"4.8.12-test.1570909444413":{"name":"ts-toolbelt","version":"4.8.12-test.1570909444413","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5099a6eb70cdf79c0c81324ffe1ea55246aa0c9c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.12-test.1570909444413","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-gZEJrv/R4YTYRzSu0Yov3WSONVstmnlU/vmAfJ/ewBfj0wDPx2Oe+cUqNVKMa94O3FBIQghOhlpna7eSAVe9Ug==","shasum":"8a7b9e086d218443a58de82b70ca908f14d086f4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.12-test.1570909444413.tgz","fileCount":220,"unpackedSize":233404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoi0NCRA9TVsSAnZWagAAF8MP/2+5wKgbTHnZ3PGPWTik\nWYKxUt82KpsgXUwPB06HO8/6YB5I1EJjq4mh105qGHsrV5e5oSJa1aioEzHB\nHKDJRfxOfboJuRO9+sTwmTD+xzrkpIKAdGQIFfDNBqKJGoRqiRkOULIAK9Q/\ny5l8J1x7/hFvkbXwpIV1SWIZv+zjMfORhLaviEzqUVXbrgU1iBCWs6Lsu1Wg\nRsRlhARAwxdHLHi++t2aLaJV4qPCgzk0K2gdSoOSAJVfQ/7AiRHlpGRYzJtz\nebOn9/WhOjTfbNdwpukDt2+TFKFd4rvH7sWKujeqZAAq5HDfOE9Hi+ClT8nh\nDTfESh0ue4hEyIwxl9+w3oiesJqSQNoHRBWqlJLu3rAYM2+q/fxZUGhqHEeY\n/bjfurlEro+ZxTLv0zCyUBKSZabhHbIdetgkpuMDXzGof1DkkIwM/LDXM8hj\n26N1pdwXLRO8HIxZHGaTxUtw/wAH+IvoUgcqUlQtfSCNA8PVx93SCOg2i5f4\nTDxU6KkatZwYZQ+j00EVbf3+GH7o6exgL3dfalgwGVijpu+MZVmw62Q/FkKt\nKkLEUBypAZ8KiMJs+kg9aovTqAk9boj8r6Zu6/sy3nwlmxgzTWPTv/kyiM/K\nI0DSAxg5ruLC1AvDTMSPA4cZnJ9iGoOR4qv19jvTUKOax1Xk7S8kMckLVFo5\nEMbZ\r\n=9gbn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERgc7IZRCE1G8Eq+AkKfiOTHaeTTuHBkr3GUmKfnSrKAiApeLB570BByUnmEIyGwy/aEVyXgBsChfRS1acQOHVZ9Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.12-test.1570909444413_1570909452784_0.24433943897846944"},"_hasShrinkwrap":false},"4.8.12":{"name":"ts-toolbelt","version":"4.8.12","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5099a6eb70cdf79c0c81324ffe1ea55246aa0c9c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GozoccOm7xkHheibqNxJIrQcamGB884DcFChrwBTlCeQjriE8kWHEbMLo0lGlMppdi0arRElgvpH4PuuJ4wP3g==","shasum":"535f2d11774658452fc69c9c446d546b2251bddd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.12.tgz","fileCount":221,"unpackedSize":233385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoi4GCRA9TVsSAnZWagAAc1IP/2WgMdCas+ilYcEOroLB\nEZAtxowYA+6roSPNViweCJ4Ec1ouPPlQSbCe9vJfZ3rQ8577GPte4WjXIh4t\nXsPuSymNFhKECN7FAQf4SNS1zAUFLX2AqPIRAS5+fZGKQO3CGVOgkEKq1SDq\n1qrsjGHbsXaiWrAt0I/8aC+/3mFv5jgodfsdoXp/HIL251fPdNeseTQdY076\ncYe1+XEFgbw4D+ZXUc82iBBAdNsPX3/2WvFcMnmIgU0Vr6EFYqNYtZkIUXMw\ns2/0sOt/I08rOl1/bNlUJAIj3opP6fyALWvqN62z+3zvI69VDsTUjQsOW/gJ\nB39XWfspy9RKlrfIn9bzvsoU7x2r4pQSp9bQpwoSyecW3bTar2LZ2p36PpZT\nZLlK1hLA6PFIMzRJy6W1oQINlubfEg7yjS4OMww65YYYbDr77+XunB+zUV0L\nksRmhcC2rBgeKiy/sjg7CyOfJ3woggih2cdFSi0MldsY3SEVk5pk5lJFLLoI\nF11v0avAqTGZhk9pIQ6SgS8FMjOKlsb1/2NMalvKYx6M6n5t22HCDuW86UQS\nOgD7rCW/9Aeh6WCUf88OBC8HnGhvJFfzhGjK4niSmm2M1WaEaTr/75vvADfg\nj4tDKc3MY6qnu635SOiTlimY6JUhREmwr0GecG38VXnlkF2bQ6FoXeFHozhy\nb30H\r\n=v9au\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXNcsJ2DGt8bmFR5svEr6dnE/VmDzCNaWOFPC7TXB5BAiEArz0VWl3mSfGNV3b5EQ1PD7qyi9mC+oIc4wtS+M1yEQc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.12_1570909701396_0.031752201333868024"},"_hasShrinkwrap":false},"4.8.13-test.1570909856211":{"name":"ts-toolbelt","version":"4.8.13-test.1570909856211","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0f448c9155e935c98d17ad1af16c29699cdac2eb","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.13-test.1570909856211","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-yXpGh/eXF/uaDgqKXBCE++0h9faFPRMf+v7tPM3VPQ9T+JmAPOOOGC0HpoNySRqHHx30xbYrMj9C9mutbIzSXw==","shasum":"239bc9a72ec1879be57f100dbbbffdbae01cdb77","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.13-test.1570909856211.tgz","fileCount":220,"unpackedSize":233603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoi6pCRA9TVsSAnZWagAAF7sQAIdkZR5ZhWGUoLzn3b2T\n+X0X7EvdRowofYRlz8flYMF5mpZfsN4997MBnC66FAK/Fxj3faBvd/f5nIed\njEpYOwMAsRwra5CuRBo6drot6tdatf7KUYmMcU+8Kd/q5zFMF8n5u270sK1N\nCRuuOwAvWd4IapX7dlNoxiMqUpsUHSSF1hGU2m8P5TuhJO9HVZCy9VuFyZm4\nqbkVfqiNngaMTf7ApKlTWdvHPgWmOH6z9poIRyVxijy119bKvDijpZ5fitTf\ne7ZE8chLTfWKqrJsFAeFVq+6psiN66J1zqyvfP2/yTemK8tO3uMPKhOwTUhE\nwbqMQO5kGODdqQU60Uf4O+4psJEtSORvZOdgg4PA6s6AH7nU4CtCPb0rlAv9\nTB0mauCn2r8jDoawQudcfyuNZL8OjLv+ldBzISftr948AESqjVaSQTtiUe0K\nLw+QVEz6euxpBlbA0TygCXF46NunrXvwp8qwwGB1gppc+Ahl6qttz8SaHM5y\nElos5ZQX1ZMv3iQ1Inhc+ETD1ADoB1Hw6MUVR8s0xfnbrJRKVqgrM5Ifs8bF\njmSplvFYfc3an6H47qBj1JJk47hAntEBn3I9rSPsKiN4YvMJvd8N6u4Dxs6g\n5ptsrv4FsRHyXrO4ViahApr9ztZpHvcdV3I+9skOIBff6P7eS1+Gev8dKFKN\n5Amo\r\n=Lg0D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkk1L5VyNhqpTUpgk+OSYDY0p8dqn9KKjInBjNq0tngwIhALansoBK7+N36TFT5Vv4vIhQEruTKi7DpJQMaCshcjZV"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.13-test.1570909856211_1570909864638_0.9107227213002584"},"_hasShrinkwrap":false},"4.8.13":{"name":"ts-toolbelt","version":"4.8.13","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0f448c9155e935c98d17ad1af16c29699cdac2eb","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.13","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-FbZ5Jie0f5pSnGJ3AYE5OcH9IZ/qooOQV/ZW2nOFDHTtllV1vKzWDkbCK/S8+H3AmHL7jwNPo+LhtKIvfQce6w==","shasum":"515c5aed3688453445f4bd59c9170483870069b7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.13.tgz","fileCount":221,"unpackedSize":233584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoi+NCRA9TVsSAnZWagAAPsIP/1ljbeTKLsgEsADEJ4MS\nfwtzgtLTplgiJON2dObu2sehaSTDXll9SpVxXDWFRtWbAru4hv+5NB9ZjKhY\nom1MhzJqyHAe8E4LZnsi8Z2Por5pqRZ2A96oW0h5P9PxzFhRAXbhihEu+9Ev\nqtEQkTGoG0hzUFpEedPnpqqCOwp3yRj9a10tF0LHG5OzBtCuKKucaeNXJYVM\noDlWXZ5tJYSym1Yy59OqXOXupnidv0AkCITQSXg0Z5g/MIHcvTl+chyLnVhP\nooQ3T05FPh4uCanI90a5JPuvtLQHsioNTelJicO45x+AegkT8lWSWvJqvyJu\nOab7elaLwyLBxbHAYHRj4J1TCrJ9MpJ/2Q8Z1Rmji3zqJWzP9efxHlYWw0je\n3Ll2qrl9bqS0bJCpXVy58ebSt36jmbuJXxkA6D2APZKrlmsauHe2bZMuZw+B\n7UhfrshmhbJ2vg5ylQYLY0yG9TNSCHEL66oxD/fh4W4WDmRkcSttbbxyGvog\nGkWtTca4wEo0YHU0Slw4EX/77g5qUbPP2LgRRoEAyrH0S3+NnS3t58eW4QTX\nWzM4f2IpcoBNzou19RLpmUSEq4Y7TzhZmL7EKSzVUuBjitwEsenV9+Ul58u2\nVcecrZhZuCOz4rQTAlipLrEDTiBvRQz1BhUWEgTPEjggI15Hs4MznqV2xrps\nLPIA\r\n=bwXp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC0AdxkQWGtC0fHc18tI0GuijYj4bOq+gvRVkC+xdE1wAiEAgcFS9L9TCD/P5WjvJp3C6U0ydPrAetkAsGr9MOPwFkM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.13_1570910093366_0.038284313389338465"},"_hasShrinkwrap":false},"4.8.14-test.1571167118031":{"name":"ts-toolbelt","version":"4.8.14-test.1571167118031","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a87c94165d322f08d39338c3ff4a80ec2472cf04","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.14-test.1571167118031","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uQSx7pXQVv+VTjx9lwOtDMfwOUuPsuh2njkUCEUjE0d80TFqW3E6OuAO9f1v+ZE4lpYEQJS2t2SVROAMuTaDxw==","shasum":"9b7a595a4b29c5e7b28f3ae4d243191e6897a86f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.14-test.1571167118031.tgz","fileCount":220,"unpackedSize":233865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdphuXCRA9TVsSAnZWagAAMPIP/i2WqvSF+u/x76kDYzrY\nBKjnlnwE59mEoNa+cF4ZqlVkcZlA9hdcAlD/SCUSQx9lXDKu4cc/cEj3Pc76\nQairdsTtnB8iIcUF7sM6QzWWp5W/Qdly2VYe2HnWfQ4voWdWGXJHeamMQKXB\nEIxnQvGat3sL4Utn2jY9z94UohOOqPLlrg8CJl3iihhD7tADvULtDRrWMzYE\nHs+3sAs4kvygXnne3oFyrLxaDYcPVrvH6CXN7LIcsGKzE3r6Yzvs7egZNdjF\n0t9zqjgo3UhwPVQqlyJG00BYP7m0Q5rok2XQeCsN3ub+E+3Ewf/i6uGOVItg\nmfDIYyCBICqaf19tp+3M/v7u/roa4AAo4APbPthQ5vw0g+awLqNrGgWud0Fn\narygBrgbtaZBjdmc6x+/+pE6LjBugkAFTzcJQ+7DXgjb2hj5+UQ8ckIXPMKa\nIWCbui+IMRWZ6of7uz2K/lDGcmIEdG/w6R8d6Hr4HDpEj3K8v5Ys1EzGmZvG\nxLdj/aTn35aIrrh04iAtIW6p77wAWmGy08XFZ6hIjh5PMxZNtlM0BfE5HZND\nH5qQNoYV16difFdFOkbu5vddC2r8nUXnMfqdURTUFJIdJVusFRbgOfbsiWFq\nI4VqRfLvEx9bE8LHR3AhDb97ICPzFtOYhcEz4p1PzKbMyfHBwUDS8wg7Hg2P\nyFXL\r\n=21Kb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDVEHOegz4IDut16oMxC0B5QxXsOY84QWQdz79+6qYauAiEAz+CayUhzSH3JmNS3hQbb05xjd2BeE+K3bQHmcU6UKf4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.14-test.1571167118031_1571167126898_0.22429371411908638"},"_hasShrinkwrap":false},"4.8.14":{"name":"ts-toolbelt","version":"4.8.14","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a87c94165d322f08d39338c3ff4a80ec2472cf04","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.14","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-I6tJkltGi47SWOU4EISWAmaoqcX1gsGhOsNs38NG6YZ6pwENiNv2VmYGSwHffJytCUUoz/fxjPwFP8rmkul0pQ==","shasum":"f12c10c831e6baa5b29e82e37c2a8d9581080aa6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.14.tgz","fileCount":221,"unpackedSize":233846,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdphyMCRA9TVsSAnZWagAAue8P+gOqt5ViHwpv+OfvzXEC\n8ixebNDymAiXaZMt61KLPHdmRO+qzk8qiXb9s8G1n3cBbHCwpZU8uGNVmylA\nKGyInI9d1ANwSU9UxwwgnCfRMWVKWGVkguU20bPeMispLhlXQOyPhTvpHlzT\ne8RjsAAi5UZeXQN46B2x+DbwwhYuxil85l65f+IUprsi7b14c0DMm9rsMRZM\nWgCEqdLsIJIcd4dEhLp2r3w3xZBJuxSU9uJCWL17LGkfMREDZQaVLGx8lI6s\nxHwDuh4m4TMxHyWzXrqRvUzjoa+ibpWDM3EzRruogLn6yAoq8mQv9lQHnEJA\n1p3bkp1AiGYHa4YCjvsuUWGyf3xRFS6Y4k6lUGg8ia8X7vivvURYY/TF9/0D\nugL8NZUcP3LYI/fYE6gLFHpSTLxaUHL7BEDYPVsecBajlTDiuRT6gCOmnQHb\nwpIr/r91CZDibv9SXCWWFTm5eSezHAzwtXcnJ2t1+qdpzN0OY2MYPFnIcaHY\n6zKixkSajCguLcy5CC5bUSgY81qSCkM8cgdI/wNH3va5K9meeC1J6u8PQA8d\nKibHNOCxqhIXWfspMxNuw1f4OLglqN33HlyThjNyCVVp3N/le+sP5TJy2R6q\no4oatm6hy+m1Zy/kydk6PcZ90zi6CI1j5yG7mIYzIKw/sFKZoZlFU3LSMT2j\nnuyK\r\n=Dobh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS4o992GCswBL69bA5TUGILiUMk+jIcvMDPspjUV3bUAIgURfe83x0k3J0xnh56s+FMjzZ5TdX4B3sOgjGGx48Peo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.14_1571167372234_0.3087092961983797"},"_hasShrinkwrap":false},"4.8.15-test.1571168717816":{"name":"ts-toolbelt","version":"4.8.15-test.1571168717816","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b129e90df100b3f622b75d23993797fb36a15ac1","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.15-test.1571168717816","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-oG0X0yQEbhVdZTGAzyy+IcikVQDi4ALWyy47lG2dRjKxw1/sWtBzjs1T2TF1wPrgWDZA+6GYpspsQa9nEAzhVg==","shasum":"c90da6bb486da509db8a87ce4c8afa1fd991918d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.15-test.1571168717816.tgz","fileCount":220,"unpackedSize":234383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpiHWCRA9TVsSAnZWagAAE2IP/jgqBWjZGpV/6OQf3AIF\nsQ4RKYdQpHmGhVEQ8BITKjGy+oXe1ITK+5g/+SFwMC/4hogKhE+NntXcUUUZ\ngNrInynCzfwIq+drZqToRft72WDWL16bsrth/5vo+L7WTjN4VL1mxFh3PhnR\n4hQGOPQXeuBwOJXRcqmjG4ydgQFvA1zFvdbgz/dKXIXH1Eg1csEYOxaFe4Ym\ntxC6kfLKlIjJM2fd41sqzw7p3i2g14WGcafrraHOYRMYntWLZJtLkgJ7vJoo\nvwQsxUr7E++WVHujwfkZE3I8sgltpo3H/da0CGMWuLza2ftYuqvQDvAslc5y\nqI8ECXTEKnAmt+rfCrjMrwoEXhB7foz8MiBsANR7bzY6SVjkKwNug8oZKko+\nJDwjKXXdz4U+cSB8Y3SUtKrol62tu8yLd25Gt2LPkNPNabB2v1HSPEd6LVZ6\ntegZx2GV/bVMuDWJ1vXGi6e2PIVyascZjMPpEThdu3pS0X7cJYger7Fipgwl\n+QbFnUZiYl4kUyE+YW7+u3sQGJj5vEdgDsIQI9dFQUk4fv4aWyAdpPU3D5k+\ncb1CAQ6yF4uMLnpGj6m2lPJTvzPqHoKfpLbvDVT6QpkVBdJMiOOSGR9Ewd68\n2ccXkYHaYnL0SFVq4YU6F7yE8SjUhIcc/MdQ3WfNCd/UsOhda9DgLvlcbKr+\nqrr0\r\n=BTZT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA36JxWojFZ87ypXzVBwV0WrFqjfAtCgneOIjx/agvbSAiEAvk8OZPgP7kYiV7gUIskNT4N+1T+oYhymqqfHgXo432g="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.15-test.1571168717816_1571168726137_0.9427277226366202"},"_hasShrinkwrap":false},"4.8.15":{"name":"ts-toolbelt","version":"4.8.15","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b129e90df100b3f622b75d23993797fb36a15ac1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.15","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Iis5d+fQiqS2pCQLCkpfTQ0nxoKUZARZFfRo8ZGaR17rqRLhiw9sOh/DBlfwQfRZDfNDa2xhscAD+AL1B9s3sg==","shasum":"b51acf9b64abf5f4ffa71db93d6b7142047ae7a6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.15.tgz","fileCount":221,"unpackedSize":234364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpiLUCRA9TVsSAnZWagAAKsYQAIqfhsfy1DldZ0m+kU1l\nKEihUZIXGAAdUCerKFh6fV35ACR9rnBqSyWK/NtZkLkui8ysef9FVsWs/LNi\nEKF61WOGe4tOD6YxMjXHzjE2e7ElE7cVur9yxkZFFM/iks229mE+jT5zPVUE\nWqng5B4HinayJ8jgNf/+CuQwuZGR3DthyUiyKj5NDr1f0zzLEUZf235wEIFf\nxsynnoJF0EhsSUyjdIhx5EcdWg+Jcn0Qcz9FcDfyTThvLMJaPaeYkXRAYxo+\n/zjytTp0kvLtIHMzfvlg0E96gdKSpWPfdTwJGqdjoV8K48HG4LthZCzzawq/\nvNxAqPf61SXyJg4osHsoGmBXt4GrebleJqD/oYTTGEKX/ls79MxDCR2sveP9\nGSO7qZx0sQgcxuUqnABFIPuZ9tKfPYqtY6cmqZD7UoT7RuNwN/I8bgVDZ3s/\ndljYSezSh7vSi0CrMblidin98fjdIW2PJF0JtX2wUFyvZ5U5AY9jRvTvcHtj\n5DSohM6arLYcSkPEAX6ne7Vcy5aCKnyUZOPWoqEjI8o8P7z3vBq4omVBW+Xl\n0a+MoJz7RqCI/cGVUE33hbC6fU8/z/9gncnfZX9FyeK7co/ocXb+gB/wt7P/\nYRDX71T7Df3/tXekYR2+gKB2S3/oR+4s9fizF+QGl9QiKd5or+fjS2MODy9Q\nOqtR\r\n=XMa1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRdjntfbmn1FVYwqSFsPMLT6UQoGpUy/45cyS1vlWGEwIhAIcnmhk4uLGnZ0JDdp6/b88g6JyMwCz8HPjdrnimaF1m"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.15_1571168979498_0.7378170792524752"},"_hasShrinkwrap":false},"4.8.16-test.1571171883145":{"name":"ts-toolbelt","version":"4.8.16-test.1571171883145","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"233c5ea3597ba229882fe1b405918c9ac855474b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.16-test.1571171883145","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-EE5ZF5E+ZiOAj4cxfxKGG/moHdwiJ5YJW37y0P2TUDvJV34qy0/AEfXEmqZq2Dsy1riQLeg5D6kZ0CbhtvjVZA==","shasum":"8ce9dd135dfa986e7301f8cb1c6ed2f005b12936","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.16-test.1571171883145.tgz","fileCount":220,"unpackedSize":234753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpi40CRA9TVsSAnZWagAAVxYP/1BpYymBKExBpFCpVB51\nQHOB4uffIIErbqFXI+WdwFuCGUmkpgWqEj6M1jJQBSC1wvT/YhnMzYnwnAE6\nIqp2DY3nWYLdA9e6OkHHVJTRit550qDqfIXyOGJbENql3jp1tS0e2Z9rZ1F6\nBPG1i5LpezlWq7YGcR0IknbIFz4IzIzqDD4aNEgUVFMy3d5lWNJAn8D1VMss\n54zvdXd8WDarjLwNC2wEH92XjBr27tHjzLFrULJHaZHeHk7sGTTml1bt6nja\nb79yw6mVSqXpqfOt0EkeTiMfO8ZoqZhlxt8Uqu/nEhiVVxA5hUfFwLFhx8fl\nIq1ICxqapizIFKK/wGI9n/JMpSQ8znYSLtqALFDRaTgPBEZEPP5CPcttdQC8\nHQvCyuiLVivMyPMRl7S2YitOvLSvcbAY5WjXSkl9BNoo9Z8zWQO1/cedgogz\neLTSv/m5538oZn8ysbwZjFvkRhJJv0D2A02CCW+R70f4kVctqryUYC/VZ1tS\nYwwu5Kzk+2ahgHt52+QWGKU7amY19TyoLnczBlMneNF8QNd46EoFSIpb6Gwe\ny+sI6t0bmiLdOPCO9wiVeqJOjGJWWQCMj2w4NfHlL529j1NK5BQbLk8EHOP7\nGo9lH0umL4qEDpOgcM71WwQjIfef/CopPwtvz1BhbLCgKuOkSyrzgQ4VgwUX\nolJh\r\n=WSQt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6QDU7EaODTeHneTW2YVlPA8jRqUoFynGuMKWiBSm2nwIgEv1gK8jg8K2Yc5hDv9mLCa4/9DR4Bp6sumJ7/VqMF7I="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.16-test.1571171883145_1571171891454_0.28881723214560817"},"_hasShrinkwrap":false},"4.8.16":{"name":"ts-toolbelt","version":"4.8.16","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"233c5ea3597ba229882fe1b405918c9ac855474b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.16","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-4xLaT2ENZ39jD+zVYgsuETHfFFnXk8unVOesBcmp0gLd57CHKIiLLtavzT+Ij1U5Z8041m1yfISDMBFG5y1zJw==","shasum":"790c043b37335f174e681195b0a3f332d68e437f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.16.tgz","fileCount":221,"unpackedSize":234734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpi8hCRA9TVsSAnZWagAA5qcP/13g0wFTk0RBr322+xjm\n5NUwewdOxtubW2fvmOqpGvgFj7xYZ+KT1a/6xdRXkIbgNtx2W7DJ/+ceSKAz\nnKFUqCA2trm+OOwnskqzIV+QVUhf4y/sKGWeYla0zRjbbGepKkIjGDLi2hSu\nd8xkScSMjZsG9Ok3nAq+YuNMRWpBR/Osyduj675oo+9uBs3zdROF12kOrT6K\n4JcAeJ3kvcuWCBl4+prWeAL09iPu2xLdwz6Bq4yBb4X5h/q2s0YCx/8TMxU7\nre0XJ+zEIsFISA8lHyiHujXJvqP+oLhP0p3DaT1y0wDInHmiyk7fYvEo7ste\nDA3TJy4kdck5eIMMkPacqf8O/U3irylJjWooCc3Sla3I6v9lhUfwWJCl6yxX\nGO8cpA9c1J73wY4HDkRXEKIk5vloqZ0w4E7mgtbXLNfNX8ZA/1znmWQb1yzf\nOo44iPIXLKq6I8W99+bYpCr/2Dh6kLuAhTBrGyjpEoL396xuPN3mjxHBvG1a\n3rBNU2wANV5dF67sMpuEDMJlvxiaVQ4zO360ZM+ud7Az0Nbp1cbLKThUpvPD\nsb3G7JTXaGKTyHac+iawVoy1Zx8wKJTTBqcd5sqmDNZ/rrFgKV4aYKWWlFEx\nMK9MTw2fHr8LpRiAYQIZBOa552duIjU5bpSPy9FDbFVtk5s58fEUyaUP1ZNx\nMbCS\r\n=i2tB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFajgrJbpoyunV55TXOEGB/QRzqRcse0HFoq+DaoSjCNAiBCGKDCuzrtfdvNhjnw1hTnJW6H+SmiGsd5zw0HllyGBw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.16_1571172129260_0.10698822810356678"},"_hasShrinkwrap":false},"4.8.17-test.1571315054089":{"name":"ts-toolbelt","version":"4.8.17-test.1571315054089","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a78edba2d5ca34ab62bc2261e23bd44dd2facee0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIt's goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.17-test.1571315054089","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-OSSXJ+yzG4wSLyE/jLUErZ6kxgNHxjpkrnRvPwzKot2JU1b3m74zz8zq1VgMwdwTgFLdqfGG2PW6NPxgIfEbTQ==","shasum":"02b85c74247e87e010cdcb117ec5e2e530352189","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.17-test.1571315054089.tgz","fileCount":220,"unpackedSize":234593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqF13CRA9TVsSAnZWagAAiTgQAJ2Uo15pgZ76Mu2F4ZoC\nBOHdjnBnvcdX3OMnctwBP1XLfwNiHw7XI4SSqiALvbQx31Qd79s5z7LRhV7H\n9zEs7PEMRMjvYkJeLgoLPiN9gxNnDWG2q9J0TspWD1sq/n0VjUCZlqZYZrte\nXT9EjQLz839L6PrluIoZPPqHWmlaPCzZybnPEypayt4FZvBDjPg82mTZ5Mg7\nZXmS9axcm6uwYPSTGSVpHuYVGDE/TW5eXkZW/276gfNG9ooggbhU8lg98YpI\nkXwd0rkH2FpHXiHy/ZcJStbhPfjOz3w0JLIs/IktPsM+de7h8jBINHNybPCD\nxFKRxZWHHBeJWbkKOOGvkBoNBjdah6j2A/X57h2ZSb9Wp0yGuuQiXQuXAHc0\nzFjAnjzBfppRWyWHObAh+TBNngK5J67R/46dtfpR5sKc5c3AxJVa23cMFIog\n5QeHXOugLRXMaaJeFN6m5hEChB37JN5UWx0EzXm5UfMAqOTvZ+a51ov/Rg2f\nHyM60bjoMRPZLnlUdaHsbPotYebOIouYjhZ5neR3lN6lv5mtLb8MJoOCowmD\n/UPFprMxcZn/PAAcvNINT5brVvSPLrf+LbCHrlVfyoMohrm2Fy/99yhRv1VV\nXZRVBkOLhxntYPkeMBccHdGrPB5b030101en15ZKpRfm9c0l8T35aH9z3QQw\nWtTI\r\n=VF9Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBzVZCod39IXVoyrnEgvPKMMbz2VCdjM1lww/fzjhhECAiA+4V4ZxGNIOmwhpCXkM0MHVwslhtLoMg9hMRD4tULvtw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.17-test.1571315054089_1571315062518_0.560870767253492"},"_hasShrinkwrap":false},"4.8.17":{"name":"ts-toolbelt","version":"4.8.17","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a78edba2d5ca34ab62bc2261e23bd44dd2facee0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.17","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-MNbyPT2YHmAN7PlbVG0+4RfJ9tsO2l78+MbDOLEMhAE61C3SrDcL+GcGHCxOsRALQqZBARLHt1hRUHhFu7x5/g==","shasum":"05e6f9fa1c70e06c016f76e4f37c1b3e1583c224","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.17.tgz","fileCount":221,"unpackedSize":234574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqF5bCRA9TVsSAnZWagAAV0UP/ji/pI2GprKQLrBrVvkg\ndmBYt0z7aCxQ4X7b05h59BRisxQEupruH7AgJkE75wR/0Jx09SJ1YaPJ9XSQ\nAmn0G2DdiF4JQll0dR6vrtMHCiL7WsWjBXLThI+bgrU4bQ+hz58M+aHZCuXE\ncImFSTlsKqAyY2MbRN7XrlJxgWIN2PC+W1BqifdSwlD5EENB73wTbfC+bD73\nye9nfMBOrXUSxmmjeN5i17EUlvo9ZxjDkG6W4FhFWR8C7cj68YNx606p6a40\nXaWs4R2Zh9tbHpse9ktVbmWWgGw5fne4ZTAhu0OlJ+0FOiw+QNUZUgzp+wWD\nWuYfc2/45dazz4fWIchuLLx+57V/nXWnWunTEoCi8WOYfo9MzAJ1TZCJQUJs\nTqXawBwwPjf4Qi7pzoXyEXo5SmUK7z8XlksALN29YZOYec2Wf8qJRTym1uP5\nGQUNi54JcvBkpYp6A2SjHAV5v/GYVoUswwXZ8VhiCo4Ihw131GPfnuwxcgsY\nzh8Pd4p3BmHO9ToatCmBHBnTMDIb9G/3xzRwKtxsMtADKvFTRTExCI6Y4VRu\nnXna6cdjuBueHUVe0Jx62KCrks1BqJ+YlJb3hNFW7a6TFvWFh2JMj82T5sr1\nCb3aeoNbsns6hbeW75mmyGXOoI6Q5jKYs/RL5A3LQw2XRjWWynjd553Ku9h/\nnRau\r\n=MvlB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGb7pwuTPMOwDpPUevj5vOKEEXhpTJYAxkcsPXUO/JSoAiEAo7fy8OvHYJIO0uN8HvCThJEHR4ml6rzNLRiWFr6uNM0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.17_1571315291227_0.02408477638202866"},"_hasShrinkwrap":false},"4.8.17-test.1571328589545":{"name":"ts-toolbelt","version":"4.8.17-test.1571328589545","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"af085076ec101674036f538169123b24c023c720","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.17-test.1571328589545","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-liM6BNl5Scp5NmBfyHsB0srcJJFsrG+ge2a2GEfaw9jASLs7re/VYPMUWjp4bAwPyzLVRyV3MDfTikF479Kg5A==","shasum":"3f1cbf25aba31c2f9904ab28b6d358e92c9b0a50","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.17-test.1571328589545.tgz","fileCount":220,"unpackedSize":234592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqJJYCRA9TVsSAnZWagAAdYMQAKARVf5tXcIQJm9MVYgW\nFKPRr+1UADJS3HljmP6ZIaZvjPLzXwaGD+BiXtcQtifnzWvHoj5GePAlrWVN\ngNTMdrSoV37IrANcnn/76SId6qlx+iUjViEHWflC/XtemUUTcbKtWoq3Yz5C\ng4S6Kr5J0ekY/hZwCr7pFsvgQXikXJDiiR6yoOSnf42crj4UU7Seg5KZkXw5\njipALUEZ/b7UkiuM08GAQ9goU75Ur1uZvqpfBCzGiq21Dd37ENLp57XGbUvD\nIM7JyhaFyhcO0O7GTWvaht7FTsEUvKisHtskdvUrewtg8RjCdfXJx2VwFngx\nuQhdcZa9WWtpl4vDeIt9ytbAGUccbdWDDkaPuPvGuLNKOi03CL4mk4meb2Fj\nOkzPnR5c8gSxZdbss+oPjSv7+KcKjmIIRua2SZcXMX7LQK28JFaCSwcu58Bn\nEzSX6nEe+pSBn0ADja2Bh5coEoP7haeYRUXEUIRT0ne8kXivk9x9NneTpkw/\nDWfIrnkK0vpng3WMBEr2tpgONGdZl5GThwqfxNBX/J38ApjdCS997QcAwV35\nfGX8K1E+JUq1YFV4p7p8hqzQ5S4rUUP2/hObIP7hL5sxfKZyzwurqrSsTcqm\nAqb7mxTRzPn5NvvxGrJUg/0zfSkGV1TJaJZJCrZXYZrCUwckR/461m1jvr8g\nm1zf\r\n=fmZY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHb8zGypj2Rg+bIyd8kS17AkGQqaUQFHPlxQlnelUy9gIgDuAYUnmgq8x2EjDj2MLdyegLXG5xfDyEmsBZx2+s1AM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.17-test.1571328589545_1571328598894_0.6674452511556506"},"_hasShrinkwrap":false},"4.8.19-test.1571389956421":{"name":"ts-toolbelt","version":"4.8.19-test.1571389956421","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5056eee8019164e0f1748fcf68a3aac938da4770","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.19-test.1571389956421","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-BEFxBEY46vcBAZjSfcqESnEP5z5AKSknPyn9KamWilEAXYF+3mYcJ8rY8PJU66ivzT2/owSaTGi/5Ruy8fqq+g==","shasum":"d617b87f4e0b055b3e539a8642c45d88207f1083","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.19-test.1571389956421.tgz","fileCount":220,"unpackedSize":234940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqYINCRA9TVsSAnZWagAAxcIQAIymfQMtnYHxmKKBlpU7\nIIE42gEPj+3y0T0UwnYBk14COh/gOjsedkcLQzp4r3zYqPZDd3GMtyQv+iqq\n/vZXtTDoFLtIy+Zedcm3IpfqeCsOdsWi4dEFhwigf76EcAqhTk88OWJs9/wO\nDAfZ6DMx6jRgQ9QAfu9DVJ+J9q8lO04Z5pUMW9QxVvKmjfCe6fQMq6+ZGLlT\nzh58zn77IZWC816DyjNSGmVYZfnBW80ziwgb4MM5TIeXeFG6z94eswlnDpsQ\nzFVpf8+cZY4SQkB7S3gW5mpEOMA11x7SrQt2GhvsUgTBxofm6TxrpADYB4HA\nLd51DnwWZXIAipdOM+z1u2YBHqIIZVmMOZTK4JMAyb8SbeAxbaEzM3m5KVS+\nqOqIUgADtuem6Bt/izAc00eARU2+8z3IwrfB82fkLkrpTPFRiTbOFnkC9ysy\nPG6L5UxFZd2yELMs6/WC/7Q9FdmVWI0ZzyvxbJvMeaBkM1pn/DwquDwHr8Wg\nYxm+QIVeOR32TUDtJFFIbv8Pz/kS1C8k2GCglm0bjV1kdMZLipxbm5iyC8v1\neD6/KaCMcxYsIxdvomSE3erMWVF/YDQY6BZlJ6uckgoXg7RrDQvGxCQcWsIp\nimo4+RF/wg944LbCYYlAiOogbkDxlxLitzdlyDky6RhVDNPBMdkpdoSo19r6\nDhoi\r\n=FcJH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGImSWjF2MKAMKjtS0IxRR6n7dsgZ9artCnAcK2UnJT+AiAGq5IxD+3DshCSFrQoN+Qj0nP/Cba6WnFtexwCP5sv5Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.19-test.1571389956421_1571389964601_0.08322322338045218"},"_hasShrinkwrap":false},"4.8.19":{"name":"ts-toolbelt","version":"4.8.19","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5056eee8019164e0f1748fcf68a3aac938da4770","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.19","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GSUJd/2qILuLTj/ekGHsiak3MkNjK2fX4baFI/9+7YDjQQM28ZzfOYJ4I7TeODdogK+MYPvhE46byO300FmPlA==","shasum":"bf99490dacc1c941cd53be926aebcdd445dc329b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.19.tgz","fileCount":221,"unpackedSize":234921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqYMCCRA9TVsSAnZWagAA8DwP/Res9zzBVRpMN2kUhxUm\n66+lXmrLGISUuJpQf+V4PjPHMnwJvBVnA+Brua4aBdrwQ0XhoaMF1vD1P7vD\nUZGNhhZXCAxw5IE2YRe07yZXpXaaqypCoXZ0+jRBbg+NFc50EWqf27Lzk/8E\nStanIC1MsVNGSbQYU9UDeCgFRcN9aI5Ju8yG065saEP+p+Zzttx4XJu9yBdR\nwecN4sqkF3EP32NcSuoh7MpX6n1A3ZHzeZv0AIrjkzW17Mgi8tDwf52s1ko7\nzn96KWX29zyAp1FqmjBXuak3u0xwTIrbszHuonDbC0jJtvIUfMv7Djca3uTs\n/FHEg9OjbVVGHsjTwsOogEcaURidF6nUb7uF4LyGrtftVscq4mKKNIl3t+17\nGKmuXji58xGrAi7eJ3V3FBICoLW4tUuKZoUywRNrmV+TBcIRccKnzc4kvOHH\niK5FDzpSBD3m69wTtRjn7C96YM/1T6EOPhJ9HL8N5LUstlqpf61FzU4sICPd\nM9VW+MQc65d2RtQEXXTQOj4R11XptbWs50SeZo4kw0LG4ppWUShL0e4dXu0f\nlMkXMhVRYHOna93yNv56wzmhPthFaEBRZ4GY6wjQcFgZN2QE4WDJdT4z3T77\nbNWeNcE7T/2B/rk++KKPT0wwFH7bVHeQL5uaYiKDT/a3PMJqH7RnR32tVYcr\nI7O2\r\n=s2HH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHARtxp8ckMz06eiaD4eiimBFQWCz9GO/S5pRyglLU21AiEAmAqBUlFteuBwSqpiJWtmaCwRygd6YYIYqbVFBgHnBpQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.19_1571390209938_0.350314585067548"},"_hasShrinkwrap":false},"4.8.19-test.1571484323594":{"name":"ts-toolbelt","version":"4.8.19-test.1571484323594","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5728c5bf07c26de3a2536638111f04f4fb0e02de","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.19-test.1571484323594","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-PJB1QkpKYFd6HGwUUKnZs63O0LDwPY+iLWYGTO4nmRq0B0+kcQMB5Wl9AvhjXQG0V87/u1Tagl4SqjGPkWYkBg==","shasum":"b66c13845ab476127176fbf3b502ea71a1393101","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.19-test.1571484323594.tgz","fileCount":220,"unpackedSize":235529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqvKsCRA9TVsSAnZWagAAXWQP/icADna4snvsZJvfReT0\n/jMmwtrGDtbhPI/WeBntJF2gV8HjfjdPSbVgX3izSRJgegkmq+2z9sua9Ed8\nm2OwKtqLlX9iBmyh29U7VJwKmHFGh18fGAVtdGjlWjsTWoeHzKknSEP/KCEU\n9MLT68wRu222HtEAafTeP3v0fGYhdZbtxu4+zyreIa+9ujRMlh3YosrWjDpJ\nuPSgFo1N6b/YVUQGutiTzzhgqjBy4yFq9tzAHjo2q7qk3QuhQV4og85nMoJV\nxdiGZCPrIc2clCCs2/vFMMjaMffLJoq08duVAdqOdTuIlABbWR2FoyBvjkIQ\nlzF0a4DNIldEYylHLmS2MKMkSXrQi4GdCZQB8cw+p3pmOxdvS7VLn4sqki00\ncMvhfU92EJbx/m/IgGUCK+B/IAS461MyL35sbHzp/qFkX/ffkbmdigMKWMRb\n1BFaR2xfdgpIRXSQp7ODuTn8NlmEnlnOKU2QjTxI84V5SEDYevGQTlaLIG32\nB/OlpMqlxc/Pi5wqcL8SshwGj6YU6BorpNmng2y5uJfSHR6dBunaHfK6Ej7v\nBGdZRiP9z8c+1s49h5oGGDxXqKgmivGUSRHhUEyRalE/6vJ/iZqwlTxVqTE3\n9/fnNbxXqO5q//5nRaVjAQHl70rv/I0WCutGsIh74TGi0toIOVjDaVewysO3\nd4uG\r\n=dUrN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoN34LfvkDrlai6YVlurKZkpmZKp/1Hfx7E4NvuXMiAAIhANtEhBl0m05pgnNy0GwbAqBLAO56XGUmjibtYrRVOF4Z"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.19-test.1571484323594_1571484331720_0.30333917657946063"},"_hasShrinkwrap":false},"4.8.20-test.1571484724721":{"name":"ts-toolbelt","version":"4.8.20-test.1571484724721","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a19c29ef759f54e996b0feb266a3534f41b8241d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.20-test.1571484724721","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-AK4LQwW5cFRoBvXzYnLk4ZU3MX2KlOtgVvlDlCWNNSk9M7TKI6FHL8wgXm3+Gv33wJQFcMlKY7xo7jkDFzdc3w==","shasum":"e4c2b6ab8c8d82b6d949a81bc2ce369190ff4c4a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.20-test.1571484724721.tgz","fileCount":220,"unpackedSize":235961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqvQ+CRA9TVsSAnZWagAAIS4P/0JZ1jxWxRvse98FyYO8\nOrivR9E5cl7RG3Th3ADEfNszf6hS/aBkycX84P4/jwjScnJYmXV1AcKubHf5\nNw271GiStviTXfKeZD/6D3faAdkPrPgfzM2dQ0lMJb5J0C70YyMogG0iXiOy\nvMgv3VrAVC+40ES/4sxCEHbKLVuu//+AL1Y88SlWc7xAoSlvIIaCoM/cxfY4\nhaeC4qoTgd6PEIeXDwD4EB3fLAlTjw6s+22oyNlZGuirf8G18S+oQpSQQjbM\nChrpAu1jkDBbiKPv8W3Aj3I/LPyOp7rnMBfAeE2dWeat7icKy7dkTNS9o9M0\nDNYxKMnJDEaq6eb9/lmfYQOhTnQo/TdWre7nkxiFZ1r3BtJNqYtypkil/tPI\nuyMnd9DqI8Km2cl0VBVN1GUd/4K93W2Jx+ZRoFJp0uXGqcy+ykU9ngjrZjhA\nS/xH1ICgwzsbZswDB5lj9WEulLayrKWwMYeaIXUiC6O5H6T68kmMDFehp+wN\ndA3s9nNo8C3c2J0G+XTGfSP2+akE4KheL9IphALmBln1dZ1X0WICD7t702+V\nhr5M6v46uzSloEv2mwQR4JSQtBUqyeSfTWVuNdu3n02DsjeICPIZpkWENCe0\nXWvfjZw4YBz/E/skCAnzIo/eNu6y3FZsGwcJGmVlpzBjX74UyaJlkmGWwiIq\nTNAm\r\n=WK4x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaJFAzn3gCVMHSG6Jeokz8eY4jO1HaD0fWVYZOCkkNhQIhALrIgwwcwJZLuLf4hCbrUaecRbFPQWur7eKEjR2tUN9u"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.20-test.1571484724721_1571484733450_0.7862158218287867"},"_hasShrinkwrap":false},"4.8.20":{"name":"ts-toolbelt","version":"4.8.20","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a19c29ef759f54e996b0feb266a3534f41b8241d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.20","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Mx83L7RqXS7bG0Knl/rrfsDxP7u/+S2MqumyH+7mP8eGrxaE8VtyWo1l9aw37sHtnuhYZSFLNZvnseOyIecgbQ==","shasum":"0813ac0c4e443dc3cfd64d97fe4bfd203ae38c92","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.20.tgz","fileCount":221,"unpackedSize":235942,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqvUbCRA9TVsSAnZWagAACJQP/jJX1E3sIg6bnmMPc61c\nKL8YG63ucbfnJUuDLQFOYs3qrmpXPsqE4lT7DLtqJohaoTbVsV4zrZ2QYmPB\nkYjbnYMlFHRFOPR1CuMoswkwzpm9ilQe9/N4zjoBmG8KMLfRfYp3+9GZLziq\n7XF7ima7V+38SNzpWnBAFHXMphUUr8zZrjsslOZcczH8680sIqMq/PZFgFqN\nQoeKAfj14sfaocT6pZggs6U5SfoLKjClxGhaaLQNPfEdyEipzv0EFJa0hStg\n0T17/ZzzPkoiJCI0are9IOznFLxXbVnw2uudxuryjAxFD4xoV2AZM/IMVy7w\nO+ik6E9541TmShCdQMPb3zjf3qR7jVOcU1isp5X9T+kbUOrMUgB9nMBQm2+A\nhHSVKjckmHLrZQH/Qy5Db2BYXXmTqYc/DsJvwsqhFjQUJwbQyDFVuk05xUX6\n6Hob9Dz9dYTpkQ1A6UqZyXlSOrueVAy0xAR0EAo46RfqgRPF/hD3cefu2+FX\nkYxGRsZMLjpbLqKayHLv5E6kZXxxDXVQ0/ugx8Qbt/tn7KyomIf92476boS7\nw3r6ZWYQD4/zugSzLRDw8RxZ8vbilAhFr7mc+1C5P2pm6GbmcCQyJ6UTFbr2\nDcJMjaXLUmIG7UvhH+Mn7LqfEzWnE/c8If7dCea9iSIkoFA96VVes0umu35+\nn2g1\r\n=HLd9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIALDQVQChIaKQiXZR9kylslk827AwNtUPq4Vrv6iMNN7AiEArJ4fKAehbuvsSRollzmR+m5vcZlXL32njSUqyFRlzlk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.20_1571484954809_0.5625346900132011"},"_hasShrinkwrap":false},"4.8.21-test.1571570305681":{"name":"ts-toolbelt","version":"4.8.21-test.1571570305681","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"10c70f668558f9b68dfdca3b051c4f80e572c4ca","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {A, B, C, F, I, N, O, S, T, U, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<N.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<N.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 1.x.x       | ~3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 4.x.x       | ^3.6.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Improve with user feedback\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.21-test.1571570305681","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-u3UNpJNsW8mxVBKo91o5siBx19x8qH+4V/xmHAlpIlBmDMgn9E1Yt6acoDuSmIaUIKI+v01IbCz2X+/vFCQrfw==","shasum":"5a476a4d7fcc6982491f4bb0d9c1b2f3f75e6c37","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.21-test.1571570305681.tgz","fileCount":220,"unpackedSize":235894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrEKLCRA9TVsSAnZWagAAZoAQAJZscTJSto+IpxgCfLar\nL0mocsSXyUX9FlYGZHpkqRj02qfW+arDIBUO70tpYI/XlJft2KfS2a9/KGEk\n9dYx62C9S9Im3TRXVql9fHm4GDtFfa18N+SsOlh9DdwJD2aqkqBRWd24q1Ok\nD8iuggG/P/Bbs4WXYm/uhpuNxnnOYQa28H9+3ULTczFfLAvDd5MX1HDZgW2e\nuSqkp5tUHRADtF04lL/CRNtGTNLSnnmqLXuXE1ntcJrfbEEkUjOFihc5X2Tz\nOItjCEBbcoTi3mXlm8XloDmfCvk8KsoxO1wkNN4cMc0x6jtsAlvXaTT/2aAm\nCzJjAnROmFoCr5u6XHI1mmMUmLVdvzqLlSKw9RQ/AEzZZ6gvbZeEKddBU9Cd\nwm77cvkgJzfbwnfoIlqplZZmq6j9wd2RnR9eSKpc1xNRHFFUlKfwc69xGyAJ\nUvqREF87qe9Ro/3nqOwiRiUaztKqn1Q9K1rv0FeyCOzy4twmPRMdq6bFm8zW\ny+YtWg8c+W64NchxJQLVVpzihdEoAF15Ybxg97A7LF0e3JBFzRNccPaXebc3\nALnXjlZ+6nFMDOhOgi3T5avPhmAAWK/gLrNbQz4eFyHqgYl0dImxUYJzl6EG\nnQmfH8YM1ExgcfP+n0/D16/RgUhHh4W9NS/1f37xCLFKBZnPPZ0Xm4s/EpTU\nBmd/\r\n=Xerq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoyP8hRFhYQavmyUcQju+EPoHmViuGv1SWw8JaP4lFgAIgcegwpOV4nV4OunpOjTczCzT12RPBY+be9TolgSWO+V8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.21-test.1571570305681_1571570314891_0.2034637396113812"},"_hasShrinkwrap":false},"4.8.21":{"name":"ts-toolbelt","version":"4.8.21","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"10c70f668558f9b68dfdca3b051c4f80e572c4ca","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.21","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-L69OwS7tp79ZpK+LpKyD1SCmL2Cr2bNAJMnE8Avukmw5XEcc/rxXLa6f34p+HH0VSByvwrteuvXr2lut1AY0uw==","shasum":"d0b735e3892a92fb77dec3d78e1cfbacb079c67a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.21.tgz","fileCount":221,"unpackedSize":235875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrEN5CRA9TVsSAnZWagAAzdIP/iWo+mme3Sym2fSBnPUM\n4/BrUSF/Yo24bjPZdk6JJ2YD93PaXC+bLYoAqRG9Ui/qGIbXrNXG6//KUNlI\nClwddWj0PtFMXGhIiUze4a60nfg+kcKa8wwvQrVasDpgToFE/hTlegPXwiAo\nPb3z7bnFr0nFx/gnOJC2WnVIDZgCVklhGD/r/kPd5196rsI2XdlFUHdlVzYw\nJuGWZxVVw4hZQ8DOF/pvz4Kn+2rTIwmpPJWdj2wrizam287UT/KvU5M7gqNX\n0ew/0qPCrVTqNHWjdtk9J92Kk6FBpFJArXt4ne7yGoFXmDyCwg+JEQV98ALc\nqjVJu43UdaTHlw6tLuk4+aZK0+GfLrHJRFL5FruXgJIwCuARj1vRBzqmx3PP\n4FlakQ/JK8KCi0KInH40LlHv2sONSFYD/WsOdG4xjLuFTKWW+W7iSQWgb88I\nBZnR1TMX5iP9AcUCTAKHOEGXmnhhGDbr7aOYbjpsJVyaWrrs+COfxto9SaV6\nNkCpInKKT/ECwNVYO0p6xkCKI527aEsgOlBE4mtgQBOLeK0It0zRuw4wbfIh\nJ+DA0UTNAQcIR7vDVzU8wRTYAzL3KUBQkNGpyxmbp1adk9rquVVarCqX5WrS\nf2W/+3sOY6E7eRcWSyrPfyCxLKXiQKG4xO2Jm3L7OT8QfGx8WSeqltceoADA\nE9On\r\n=U+vm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICea5nNJFGj4Pc9BzQfbvUmXIdPirUbOLg6xbyqPQhOZAiB2xuSq/VBCPas7x7u45C2UOyKiRr8sdUGnGt7XAI1arw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.21_1571570552465_0.24617070467643853"},"_hasShrinkwrap":false},"4.8.22-test.1571658793860":{"name":"ts-toolbelt","version":"4.8.22-test.1571658793860","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"8468d563c6b86c79550d29c635b43ea666874f10","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.22-test.1571658793860","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-q6lkjhosdVd1KgBMCwr/SrnC72rDFgsCXjibhFDN6QLCf/Ahgh3Sfc5OC/TftM38lZojNjQnMJAQsWzaM7yvFw==","shasum":"dcb3048f103f1708f06b65e97052f9b988764efc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.22-test.1571658793860.tgz","fileCount":220,"unpackedSize":236032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrZwzCRA9TVsSAnZWagAAtfsP/27dHDas7/8HEa8kBsfQ\n8ShI18IOh4xTkGbnjiNpkhxW1XJPO2JeQgUvWJbc+m6JOD47hyI3fiW/nvtm\nSXzvfrHjMhHAQipopL5794infqzpCch2d+ahbUmCJP+v3e9SZkk5EfsqBAKM\nngc91Xv9ZOQjwIORSzuYZXcmKYcNUKg8TKKY0RQc+cSxz5mfmAM9apfcQx3y\no6P+jhzTZC4SwaMgThXd7wa+S4tLKeC0bufGgqx1g2bn5Q4XSBrN9mcO2ygO\nabkm+3VMM3R39vEffqjQhQPImcBgbYHAUEDjsS5So3CXrRqOzF+2etdepsGt\nGzqT1NOA91Cka/XRMWTELA5cciaYCGl7sjGnOea1+qNHdNVD3H184elmZJ7B\nTubRoIhYErf4iYA9Sg/k7H1zzNLqXJeGL4aQ/0zdCJafv8uM/WZ4Ip29h2DH\n9LA4VjqduXOLOfRiqgVrS21cjVrXPtyS1SeckUyP2hs2++gwfEDNEmfzcPzi\nkBlfCzv4VMVsvLfDkeSN4oWdXghfbLeEjvWTIpph7wAkltNH8yx7MZ6okYhj\ng8jGULoJ7dvPzzH6q0JETwyGAIBCA3334JR0a76l7tyIGMy+PKPtFDPhiVPg\nXGZUSf3jw2kH0Aj5uMMtIZy+Qj+lL2G0eesOwCUU7xq73IPsvxjUmzhEHTzn\n9SAg\r\n=TrPZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICM/LApaUTvGP0NZvxpxYigzZxROEqUwUbAba2DltiebAiEApZpPwpy9Ekeacw7eQzQ1d0SOuJpoi+TQBsCSJj4JoLo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.22-test.1571658793860_1571658802874_0.1734570583141528"},"_hasShrinkwrap":false},"4.8.22":{"name":"ts-toolbelt","version":"4.8.22","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"8468d563c6b86c79550d29c635b43ea666874f10","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.22","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-CQXoGSEOlNP0XQ1OsXVjLVzErc8LQBaAe6HHFLRpqdm0ZvZEd1q1noAle2J3DSc33LL+DaxwJzstps/AQGXH4Q==","shasum":"d7f15a5d35594af629ca10ae890c1ededc10d662","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.22.tgz","fileCount":221,"unpackedSize":236013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrZ0lCRA9TVsSAnZWagAAL24P/21+Vk7F+273M+okIKAp\nfJqPHbQvadoLb5r+41f15IBHcBb8g/XHeflgTBDXqgW9QzGzPLwXYPAD/rnm\nvVeinao0TdNmUlZb+k8V1o1csMFH5jgTwLGiaBupWw0GzdM61Ig1ugksLoD6\n2x+7d35J5LMWFHfuR6t12m6ooBeJ9VG7tExXmCF9WojNXSYwIv+f2RbZo/+B\nfovh+6snwkMbjBahkHVNsgYwxQ2ifo6vdzS1A7+bKJtVEe+L/D3zwDS2PkLW\nFAVvT7Oat3OBjVKdE1jaWjXd3u+gQbjtC0RILvDlpmNiDeU0P9xcbOBD25li\ngB0HEWSpDOUkS5QUnzGGimBRBjz6WPyXUIuvAtDc+w+3MJCvaFuO/crhHc+C\n4A+XTbAKU438OqfwFQWivB7E6EtuG8+ku0zX0e3NYY1AfhCrXHs3bvXsOOUw\nIBTYiMHLd2eht+aCCWHM+oEtmTXqv7plg5tGiulDDVlJYuSs2e/pKSgspvHl\nBR1S3KLRfPONpPFRSj+BR3fvpSgf5j2+lZmSq2h1yjbzO1vopBq7nuoF0To1\ndYczU36wp7/UenuR1NZpr5nLd4lXnWiTPauHninJlsV+0kNWT4/7zxuosZjH\nNwfrGdNp5EOjyUiO7/+fSlCowO6WPV/fXdnOPGQBgXL2KL+iLrNyHuCPWms/\n/ZDh\r\n=4Hse\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvy0i0/2HkAm+LbhSsnz4X/gLGGVQd+pG9AnFvAUlrJwIhAKZY39o6g/5OGSNQhD94DB+UrCvPGWjTs/xMKZdY9lZZ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.22_1571659044476_0.9476431009581159"},"_hasShrinkwrap":false},"4.8.23-test.1571937767384":{"name":"ts-toolbelt","version":"4.8.23-test.1571937767384","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0de10485afaed90924231ad2e35dcda928da1630","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.23-test.1571937767384","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-i8PhreyA18pPk0iG7Hunv8cAangb/9RnpDnTXZNjC9G0VkmQq3NTGfb8h8ZLn0CDMe8grjQeDamP+58Zdj2n5A==","shasum":"7c3df60854b97a49742a63e3ab8f3638fdd2a7a2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.23-test.1571937767384.tgz","fileCount":220,"unpackedSize":236254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsd3wCRA9TVsSAnZWagAA+6cP/iyTptNLCTWYkqgFzHX5\nQEPnraMGC1TRIKKz31bGUHcKt3eTDGNdHXPan865S6+Gahvh1LJgw7vQmqMg\nEEKSNCXdftTeEFnIBml/AfusWxremzdxaqISlv0gJ5WstZC1INikBWjrHcy9\nGBLmRe/j166VQDpeV/zZ5voh4+9MMRMD1fhb/RSHoRSkxElKsb5YrcbJtP+d\n3wjT743ipOTi7eRyer+RXqiaMpdJVL13UKS8msyLtsl7Gmc862MFgnVqBswI\nqk1e2kEXlZi3zpSHf+VGQCMr3p+J9EhzPCDmz7qWZJ4HS5WQN/wU+APMrL8J\n1TvVF18J/3c4ROAPkmr4tz2g+WuP+mnjdWAyrWd7O46gyj1Jyg10pDrsgqbz\n26MPzmi+1OWrCNqNDwjd7df9kft5Yg6dH9fpwEKYcruX8duYhDE/TxwR7gh6\nR+3Dbw8tkjLYPrJLpGNlGjznLQlfw9o9Y62qVSZFI/fuTdKpfrzh5AGm5vEG\nQ/diIAgApTdO1TxqYDix8N0OAA180kpl6xqGY/wAMQLcfBPYMdcXFozxu/KQ\nczZqZT2fqHZWFFvHams6e2AYpXpmC1r4aScv9o+Oq2VfR4cxkgxfvakwT0Nd\niH6mcG2rrGo6Jw7q8z+uzijh/64KZQXw3ujhCe7Vb22/LNgQS+KPH/rVxc1p\nLOis\r\n=Xlpl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEm26+XHfVJ6PCiOWBjNYB/nAu731O535pcPQANROptnAiEAngvapTRO7JmlqHv8RN0/TqsYfnOUsS876wiYhgpM4Iw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.23-test.1571937767384_1571937775744_0.14932267188566994"},"_hasShrinkwrap":false},"4.8.23":{"name":"ts-toolbelt","version":"4.8.23","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0de10485afaed90924231ad2e35dcda928da1630","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.23","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uTRrX8muDUr7euhevmcTjap15s9F+UcPmBORLoOYxJXJ/gHA+d/elj4GynKjgncvEr5DTTMdTu/YFwk48iTegg==","shasum":"2a9c0c5ef62e1e18d9839278a5c966b8d2eaacaa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.23.tgz","fileCount":221,"unpackedSize":236235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsd8MCRA9TVsSAnZWagAACTsP/0plTUpP1Q/T2RaYHv18\nEuGV5fFh3WG3T3tckLUMcrFLizu72BiMheUfoUS/qYS+6DDbUu7Gtd9pePvg\nb+35Y7zggaG+BuivJr6eBjptfZUxNfcCpyXHKxu0Fu2+USK4Z6nro94LcBLd\niORedg4Bx1+uXHSniY/3v9B85vxVb7bBEE7auLz0OwQC7DoFFBc9sKuSe8sj\ns4S0qgvDkr8fg3YxV1woCH1aX3qmrlDneX1DheYrSdbPbdt71uVpSO7I4Rar\njaWgU9RGTqnHtJy3ZOfmjQV+Gv9nXbFdpxsCapsAPyUrER2JxDUXyfXhYfZX\nc6d7++gmLER/9j4MMBy6424756Z8m9w4IdjjVyYErDj3DXq8KzVr2nMhtKaa\nhr8dO5fgTsE4p+LNlx95VycyA8qFV+WynXB+czWLlZmT4WEy0213JOqCbIo8\nNq8b+5vESHvI2C30JnJJnLWnEISlGbUbpsjdsdUkDtZ8956BXocQHaCgBSqw\nnC4RNRA+4glJNmClyW0giOlW4QsyhvQyEDFt0B4HTQPACteb5O+cwCMKceH4\nZ0eRl5qVV0ix0l4QsUoL+/HQiaD4yjlfRsDLFHmrIxweHDJq7b7AfsCs/H4L\nOdnSDaUs6/Ll/WihBhcdq248OxKoVq3p2CPmgLERvfSqG62V80R2zyg46kC/\nhdrW\r\n=0wgm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2/iPPFktPMvgsZjF5ePPCJbFKbdG+ijzoVsUDNSHbfAiBvbr55NwrNTeZ0C7nq57ZN9RmjJ4BCyQnCqw8Ey5akTQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.23_1571938059749_0.6182095425958771"},"_hasShrinkwrap":false},"4.8.24-test.1571959820954":{"name":"ts-toolbelt","version":"4.8.24-test.1571959820954","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0182a000a70b2fd4752cea297bc028d55f18a159","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.24-test.1571959820954","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Np5Ad9fJSp10MpUZREcnWegXl3h6qaqfFYUVVLnx5VqIChfPk8ia9mYzrLJQQeXcCbCDLSZd0bk9IpeYPVm41w==","shasum":"f8ef49349c5f02ef5c27437d3423402d3186a205","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.24-test.1571959820954.tgz","fileCount":220,"unpackedSize":236072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsjQWCRA9TVsSAnZWagAAA78P/RZB4/FlkBaI4IOarv35\nD9pIfD/a5zLHRJJHjHLHdz0FzT1elH1ypUFRsLo+QokwPatOCL/J4pX0swa8\nzGDFc1iLQSu77wQCBlWQF6hrepXgyow0j29Nqr2wLGR4bDmd0xEuqKyhdSsJ\nAFPmq7WxRNJQVOUClLDBjVU2AbqiOdS9AU9eWLT2WxEP3B9AkYsnPcM0CWPU\n9orsTk7Nx86p/xJUbFI+PO49JAxQVcS+alr2ezVZRJ6cWA7W8cNjkchEkzR5\nR9EutEY17fZNuN1DrdmxhCs+nj3DtHQ9to5xlzNOoBMqlWzOH/aULi7NhBHy\nehH7Ozuu4iiC7DiLZLG9Ft8Y2VW//G6cWpUMuOtU8SbSoUO3pHwdVUZzCjhZ\nj07jHWTz0kkIwbuycFGupUOc2bAS9bFuE/dYmGfPQY7k6Bw7brhnji+kfxhn\nJE6PCT3E9Z+C3YzYKHNWA52PJqzbAexm9qkHnNet5UEXfOjvIGNueddPX1ro\nAQcguuKx+0QBtmoMChzIFCC3nXr/LDvfcviYXJe6IguAv9NKUNA+IaQ219iM\n8erChjSY59e6eg4zRauQCugeLeiZexBPGp0MZkZ7A79VYgCVZTf7VVY097yl\np8YAoWmhj1gQFMtGhK0myXSTj8WdvY9Q+cbHNJZMlpNrPX3a8Dkys/SRX7O4\nSFvv\r\n=cZ36\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFff6P4WQgmxP+WMqE9PUCagc5OkUEJCO6ErZPI2w//AiEAleEnnJuMIrx1jVLgUQ92Ivic12zLtAnIbFxGyBLpt8k="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.24-test.1571959820954_1571959829644_0.24200427807575298"},"_hasShrinkwrap":false},"4.8.24":{"name":"ts-toolbelt","version":"4.8.24","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"0182a000a70b2fd4752cea297bc028d55f18a159","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.24","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/Cs0NtCxAqZsg/J8VXaEmO4FVb3Tzv8EDkcxDjp6paoIlbYbZUmNoq8frrqBPoWrZeftTCx3QTbC8GHVa1BJiw==","shasum":"6df59dbb2f04fb0770d65ab8d754f84cfbae8d2b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.24.tgz","fileCount":221,"unpackedSize":236053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsjUDCRA9TVsSAnZWagAAZekP/jAw4XghP6Bz5u2LMObu\nR8H7R8oNoQInYWJf1XJyigub7Y+qgSFYXJznTsuSQazPNuQUTCpj44ZBM20b\nMqzOLTBDKtZj+owjjZQxGzV3sNdyFi68XVszOzTLfjYYGa+fJgO4TAVH9jiE\niVkoB7Y/fUTAq9YZkOSryzfib9IweaA1Q88p3KJ5+q8e1UKk5OxIYzdBcZVU\n248K14SYAxgUwpbraaaDdxXZ5VRupo09hStPLCuBZ5lGtJV4mxSJybeNt3xW\nHLkfpahRMuNz6bb46Dmh0/vrbcon1i7MA0wQx5lpaZh3NYe3vZIdgYgi/kwv\nhOEabrW6YE1ClLSri6A40upwN+Y09pdW2AkvPfkuDhqmKjv06Fx6eD70ZeTV\nhvmCysvdcu64hSbrweXKc+JRlp74jAbTyzRuXBeLBDR/lGPh/cfaULmijcbC\nL/olvpjkskZ2xpakb4NYHfW43cc/mcNtpoIf5Ynk2ud1FcZcBYaAH3TgHE+U\n3uV+DMVv/5kgoFw0+0hreNPrldtBjEso42FsRcKm1DPf2aXpyjEkSxo+byKo\n9LddR6quG5kO2izDlnH/tEDsFdxvIVnTZZITDhrx/hQoatE/tvve/J79pP0p\nPRO+2hG+s8PySsdRWgdzOSIL/+gv9GmZhhLPnr6gYDN1K9nlKps/MbiAPh1e\nLck6\r\n=Rh3E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwdoI0a69AI9da3PsIJUL58ViOxfmd8XbiUfLYmB9adAiAMqMR1tR+5glxQjh4J3D3cFJVp6zxH21Hg6u+eLlgKBg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.24_1571960067039_0.8383737887829801"},"_hasShrinkwrap":false},"4.8.27-test.1572089591205":{"name":"ts-toolbelt","version":"4.8.27-test.1572089591205","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"594eafd7d2f01cfc7c34a01d616473bb0e2d03e2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.27-test.1572089591205","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-os6X5rXWP3VRnhYA8/N6HbAbCC9oRJ6LvTwjSONxjPXTxgQ9y0DbcrYPcUIf4Ne1LNs+gwzosHhBeBXfHiYkeA==","shasum":"447f8b609a58dda80d23ffaa64df27b90cd91666","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.27-test.1572089591205.tgz","fileCount":220,"unpackedSize":237771,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtC8BCRA9TVsSAnZWagAAyXMP/jUPMvt2s4vDqmpnbvE1\nrv5ubex6B7P83NQWcnEiP3PZlUuWcwHE8hGUNtzLEFmz8wp0FeMyaTU/tEJd\n3f5Yzt4/o3ls3tgH+RsqStxpt5Yu4ffV1xvoivUM5fYrTdAYlOiGCBVp3ZRg\ndPRQCLKsjbXlMUdsy8CWyRg7Dh262cBrS4Mcu4HUJa+f6E+28Ergij5F5vXx\nDpCkGHaY1BXCI7ODz+QdnGWLhMeXI6NF7E5ZLVXVoBtW4pNKZtqARrlxmlxl\nLCYz1M8T8ZssaYk95+1yIYuYTE2QEx3pkIAREzxkC6kVMZ354NDPTdVAYuNj\n8MQJLiC3pAspw5mJWXm2J03+1CQUYolXW/p7b4/KqEAGHWZZseEImEAwV79/\nmObBbLeZ5fCAOx/OrVtfIfFq2ZmkzdS8VkrMhMOB92t1aDOJJUKq2rnMqw2a\na7TtdgQomuxvaatHxxTMpdL/0w9IAjgwXEIQ0kVlhAPjDsCUAnie/jJ576mC\nfNfF5dIECydUok5IkL65wWgJhAxNdsRTiZn2H9AEMeZXay7KoCHSTd1e+5lE\ni5l7zm0EVLxJCs/Da/UrVY/3R1QIHUlSXsg849YMd2aGCPJ0gHBjycHcPCY8\nICotkWgpqclinR6Gi9uGNiSWCPV5LiJpFu5qylL1Kc5z5dQvKpl8LGcLdXzq\ngk2C\r\n=+XAL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDcnA30yOgJIHtJZyMxJN+vTAuvKvMtnX8wDSQoElwVoAiBIT5i36b+oAXr/GPuasetwh19mONZVU62TIuTvJfJwaQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.27-test.1572089591205_1572089600447_0.5116297432111463"},"_hasShrinkwrap":false},"4.8.27":{"name":"ts-toolbelt","version":"4.8.27","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"594eafd7d2f01cfc7c34a01d616473bb0e2d03e2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.27","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-k0RPZ8blcUEIalKgdA71lUnUpLLG/vm9sgVMcqfRpKmrg6DYOVFkgHF+6RU3i5B8XgJYJ/31k0Q50I6Lg98uOQ==","shasum":"a54de1c40a5789d67c768486db051c27b586e9e7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.27.tgz","fileCount":221,"unpackedSize":237752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtC/vCRA9TVsSAnZWagAA2VoP/3BigX9LWG+uq83AYFwD\nn9aTaMRXos0qLd9T3r0LSVBZDNOydn2VS9ITS/4up+SluBtOb/gQaTnc/v3v\ne1D/GNLkw9m0GGx1w9Cf6arnJQgbhwefBMJ9s14RehBwVCYz0D0VeRc5O6zn\nNIZQ8IawvRI0iy2g+Q1wMHKei4usZWoXoClgcFgBh/k5g7i5ya2z5Ulz9zXx\nZY/ce4MXgJJ6wYVTaZs/Rij73jM744tI53zYnkVb5sqKkQoWEnSk+aorlPsr\n7CFBH/pOUNmtSotsXPT674jFjxkQy73tyc7M2jJn7UPJ11IP3OhU6QR1nVI8\nJQMEC5Dv1psq7miSlZH0j1HQObkCZkws6k+ZqGdDNkFAnTG+s1Z3DhnfWk8c\nI0AQ5lvRfKQTZW+74t01ReshBQ5N1jQMDMHwBrvV5yjD6pOyutESEQwT5ZPk\nqH2+qtybLaATLpXasqH6XsLLpnaLYIaMyqB7dOi9jfFglu3KTeC1qcUbEEu2\nKdJFkNX5zDz50x7kxA+bR62GONeELH6mcEYhgzFGABfXBUEjeGGvxa0im2Ev\nxk3JytImeLTgzn+cyteO0s3SUwGTJY5Ju1DYJoJ3eUC4vLelNZiHiTHjNvxY\nKuNSVUD+IWG204Ig9rUNsM8bxg2Ju6IzmzfYyOXF8J9ScGkCetQAfPa7rLyC\nDPn+\r\n=UCOk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDx+UFPZfkLUIOWtur7NAgJaaEPbMtH3xfMrEng9Ieg4AiAx/B0yMBuZp/LI0V2n+tLXu/oEvDjmPKy1MfLGSDlQrQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.27_1572089839093_0.2102937448463158"},"_hasShrinkwrap":false},"4.8.28-test.1572090394132":{"name":"ts-toolbelt","version":"4.8.28-test.1572090394132","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e2e5582aa10432a725588e0aae93c27a4f792cb9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.28-test.1572090394132","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-NRFQwTE8AIpZ4/vJq7JfR6EhQtAtozdKxzfdk6+eCA+4yhqOOUHtKOyae8PRjC2KJLQu+Je87Wp41/WMkhonlg==","shasum":"15340cfca9ff3abf8803e59674b05cb7a28e9b1a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.28-test.1572090394132.tgz","fileCount":220,"unpackedSize":237983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtDIkCRA9TVsSAnZWagAAhUoP/2bceTGnVlCan8Dd6M8X\n7UuecCJJjd0BEkamdA2KevdMOEAfhAQ0biIHvPfz5dmRUH3vPRJrRKe6Kxh4\nf/ePJg4RL6tCW69sT1aCjC6d1MRY35V8KK5PK7KyGNSaJwEuWcY3bgDNJEzD\nW3OR7SSjlCb52djurOerAVn7sO/WOk/dhUSZ1ii6vi4noSpOH5PuyEa+rm0i\nHyXa4PU4LWQPZKp6gUyi7Cxc0MeBAoHApi5fMHcJjwSRC7w91XMkcJ7r5q4V\nV1bhjbTk88kSgfd1zW0AxYbntiVGqftIiYhFCbNaJbMxzf70Y/84GWfyjfRz\ncxjAh/6zyriBcS7HVE5YMqFiHM/NpjMAmd6AzITLkpcPpCSo3RS/aVEZk0jJ\noqZjvlMUz5gU/V4Z8g1YeZXyZ3vM2EpunqONMbCXKJz3V2O0+yrf+iyWZNk7\nMSHQL3hzKdL1YJywp7m7H5+Yf2XF0MGzHj2kNi2Zc4aRj49pS5k004959wut\nXtJM668BjDCxRqbiU99OX9cNGjGfv2eCRQwNJGb1O4xPGvcNy05KRHOCYaI5\nO+eZZzU6D2KtHSzhf9bZkDk3LF0f0BqJXw6sa2jKsXTQkC5Gyv12/WeCnEyh\nJnPXIE8INkSwFKj286tkUNshjemVGufgonzGF7Spw5AYZ4LAMu7NJuFFY46+\n4cqC\r\n=DjWN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvgTfZbDFQ6CV8QMf+equB2PfKW1r7Og+yj/ge2cG8OwIgTNBum0uDp1TIP04ntvPiW0jNZO8Dwm/UtH5KfS7uFVA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.28-test.1572090394132_1572090403763_0.7776173499675589"},"_hasShrinkwrap":false},"4.8.28":{"name":"ts-toolbelt","version":"4.8.28","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e2e5582aa10432a725588e0aae93c27a4f792cb9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.28","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-nDkG6qozrxafHVSkm8hTTT4LF6KhjxUiAZjyQZSTho9FwfPq0UU6RmD5ZFRSRv4+f4VymkaKdBIuF5O7obMg+A==","shasum":"6a542cde2660228c541d97e9c1b2535cf522528a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.28.tgz","fileCount":221,"unpackedSize":237964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtDMTCRA9TVsSAnZWagAAxk4P/37mGnEFX+3FlI99Y5Tz\nGEde4NHIbOcScDAasRFLHWiOaOJsnJEINRSgioFNdlb4EE4oJGbGULlQOCf3\nmubsaL/vIzUdBCl3YsH1d350CaCaGh/oMEPucGizL+dzmd93M00ZyjZWV7BZ\nOrMe5Jx1iwa0IWZZvo5l571Xp/SfD9+U4Tyby/CRL7W7KhKVsFc+WZfA3Pu0\nnpA9ePpuNlWUXUatMK7qzzYpuY3iuSinumrK5Nj6wcqoWP7ZfILbFCFHc0Nn\n0/7+/kA/yl7Oa3yDp7iR82/t7B2sQAgDvS0bFWmyMm6lDhIuEMbDmqMjAl6a\nP00SyaLOboddKCODC/B4RjQSp5LbgwuQ9Ywb6EZ8epG7q1rKhPq4BppvItXm\nZrOkthz4w4Rh0hYBOsV9Lgj/b1KWY8FM0UzcylxkV4QBYfi7+sAa6zPQ/rRN\nAYllh8Y3VgaPPwi+SkTnsLQ5CqqJccqL9OFC//3rW5MdiwEHtjtOSqpidsiO\nIJyPZzSIC/jnGpoWbRV6rxVRu7XoUXk0RE5fVFeFSbH7HUtqCCLt6+PQw/7L\n/xNoUFuiAEVg7BWFYhzH18lhcy6HItHKpmuhPfY04z3bHS7M9XouzjCTRFdj\ntmDeZ0JCNGDao0foDBL0TW365/TDs0XwFTV1bcYXsi5JkTOg+lNUMk9ZP7H/\nOeWC\r\n=pvfc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCARnBHw+I1NPvyYqskmACVE6GT18cBqCKSM9cmgL6dDAIhAPRaTe+fz3cVZMhtMUT9IVkC1JUZMvVCyOJrDWa3tjnV"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.28_1572090643374_0.8795651226803833"},"_hasShrinkwrap":false},"4.8.29-test.1572092011385":{"name":"ts-toolbelt","version":"4.8.29-test.1572092011385","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"70c4c0f33dd04666067b9f4cb4c334922229c164","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.29-test.1572092011385","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-e9BMFVzEdymLiqgH4SyAqquYWLsXxKbUCEd0JqlthEVEUVILScl0o6nmMys+EQTh2Cg5JrvX6hJDa1HNSBaDvQ==","shasum":"8ddc670b0a68ca00fddf8d6e980f874d30b74024","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.29-test.1572092011385.tgz","fileCount":220,"unpackedSize":238122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtDh0CRA9TVsSAnZWagAAVz4P/ArTiU+4Z6/MkBftftNQ\nzH8RFNW0KKgOkt/cKhkfBQW75XCLHhkjO2cFZm9NXKaMKkaMO2csH49EChu3\nGkOY9MOHmYXYPxECf32NuJYWn4Skt2pFxYCQ4axwkefUqf0pehdWz7F24EBE\nOCBBNCwYJHf4+Nk4EsJPXfVJk/n/oo8kYYUNe0kMpMM2sOi8IHKxRK16xX39\ntKsQXGWzkmDA5rt3/wSUSj/SFHMoZVrwKDhroj2JjyztxLvwy3UjFxko14eS\nPkZsuGTpXkZmOuwuqKwD/4u0aP0ya0GAff9ktlRumCN7v7VstBAZd5uGAzth\nVERm2iSRvQg8zDKbzql8fF+mxKsYFUq+Yx6K4qMsdLl8Dz8VR733KN3ARjuZ\nwr/FDikOygEZLU3JNoILkgNBTqtle9xFEZ6OvNaheToAJ21R3Cnv52mS53Lv\n+Ea12AQcTbcTSSRvGTfChpIB83bvGP5EWS/BexxqEHEO4cumYHYNINSvtXqx\nlE/T1gOrIpEGtsRAjP5yGeqsZrXryQM5cXCxCa+Vnl0rR2lU78VmL2bnFeli\nHvYcI+DN28fsOIU3+AqTaQW/VMqCgBEm0PgwZkLLrkR5PjqXUZyUh7/4VW3S\nTk6Ec2h69IglbO4EYZgvQdY4YwUOwQ/l8TAHZshGvH1PYiwoJpdH13dWPJVw\nGjZc\r\n=Q0IY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE0YmqyK02C3aB8MkR/lN2hB/bQh9Dec1P/MrBl2CJrqAiBJWk7D3k940uOyVYnuC58RRa/glL9AEfnO2I9neQHdSg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.29-test.1572092011385_1572092020284_0.5565802114149785"},"_hasShrinkwrap":false},"4.8.29":{"name":"ts-toolbelt","version":"4.8.29","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"70c4c0f33dd04666067b9f4cb4c334922229c164","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.8.29","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-7tZp8mYojqqAFfmvIYnBk/M8E30UlqkLujSXhS3w3TM9fvhUGjfXHzuTAWBFGjCHPeCdZFl0EklZp5dxaLlQwA==","shasum":"0a23bc2d7b23e295a476f7986230c0f0ee4d91bd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.29.tgz","fileCount":221,"unpackedSize":238103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtDliCRA9TVsSAnZWagAAB7sP/i9anWALr1Jyy4I7ztiz\nF57DVwkTBEG8jV0rm3M4MJU95eoHolJSe0AHUCNrIiXZ3XcIrdJvM1xWyM5e\nILvSeTvMgeriLVMHGk0dWjrYjKovFQG+gHvkB/E3epizJFzM9d3I8k4f2WVT\n4NJmnAXxNN8cVyl7w0h/unPRwIR6PpmS2yQjVsg97qY4sUE41UJDFk/WYP6B\n6Ph9yw0pa8TEbohC8gfWdGcEy7vi8E1WOWC29Dy4q36ZHhpn1HR0MgUu6bNt\nX7I3GnyFZ+xo4GPJ6BBLUMxpk2wXd2PSPLbRUQggWMfAZMLHHFCkCZ/YcdrU\nAOIxpa218DAGzE1povPMFLVm9oAYRKvmHaD+7J19SXKsSKqmTSIaY4jj+n/i\nGLylSnKYlhHAQcELl4/JLSaWBwzNLYDo8ZJRiIjNh3v/R4D/dj5gIHceKgV6\nn6+4A8lQhFBSfmzOU5K7ZV8J2cxSPWDFa6tEp0H+k2mg6LDuKW5mWZBGvcmK\nES4Ad9Y9Tr3TXjLmhuQAw+YJ0+UpSJTmg5Z3GbEjlZUpiA1aKoSKxmjSjcQX\nJbwj75C+jVO+smpkAGeK3sAk3wI/9CGL6FWRtbbYSGVdQ/8NoN8peleEIn+/\ngRlsq1Wit5J2AYZyeWGvAdaub4s+hkTCq2cZAuv6YSTJmRGrjJi3aoVmdEdJ\nbkyU\r\n=xUOu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIn0ikey6itAceltDju4f5oyFnoS/d4UbmGDNrxEwrywIhANHsHbmFiFcsoL+jIbmWqwCKZ9MY/5mwmU7Uf8D/78Qb"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.8.29_1572092257932_0.836224543642647"},"_hasShrinkwrap":false},"4.9.0-test.1572112986555":{"name":"ts-toolbelt","version":"4.9.0-test.1572112986555","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"9a7a0cf8ed15abc17f93819f68b675e3cf86e179","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n**The money will be transparently split with an issue's assignees.**\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.<br>\n\nYou can either request a new feature or a bug fix then fund it.\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.0-test.1572112986555","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-z5lLqcR8gSmI/WzTaNltKa3sCA3zLxhofDHYAa6eKv1S1XCePpAr2uzz3TApE8ksLMpsmH2uGOWNAvvpZFy6gQ==","shasum":"32d27acaf84fe13d475b108842c281c49d08c8da","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.0-test.1572112986555.tgz","fileCount":222,"unpackedSize":240417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtIpjCRA9TVsSAnZWagAAxC8P/j/b/0ptJVkv/PTYlCEd\nBg/XCgQr66zVLPTks2dSjmRYrkHI+PB+zCu2M8m17J3kMRFO5trUo14XaqlD\nAiIoBBNfWbrxTiuxXUdwMJhdVzDYrXrOzjYWJ+FRFhJD+64WQgwmLBR6a9gi\nYhgAY0Y60af2XmyBTLKow5VdLXfN7XMOj8URiL4cCfIyygCczSSFb02fxqBq\ngZNEhzsLo4wrJzLgRSvivpqTO0m4ypMBSTvHV+ICG4YgfE+OH/yXroCgIwP6\nPshfGrrBoukCxaxatpLJnjMm65fl3hsD5q+b3PYhr4QVegveEODFHvuSp/n+\nsNOw4WCxq6aCuBA0dEF+ApPjFqqg6U/KW2hPSoMrCJzhPdrRuWx4eF7ofRTQ\nfO6YnkD/8ZNpUf36YNtjaEnoJ4fUTewu0I4FmmCQdLjAIjmPvrevbamwZUi8\nwSzyGKiD7UJzadyOF14K3nSHFpqijT+G+/wTcLcgd1iygCsgR4OLdBqgYGug\nsqH80XTdVygv/NpXRUh9mMpn1qCyWY/OEfzHQUvKBDg7ZjMv5aS39LjXvmS7\nl1OO/jwsVslQHlsYxXbX+VbgsdHrMgtaF0Y5z/qbjHsG9acy8O5zz/y2OVBW\npliAwWFsREGIA8oRsWThK7Wk+4nKPFFW4ZXB27g1beg17zVB09jj4nY3JuEn\nmV3V\r\n=MZS9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQZ5zBMDeucpWwAEYm7SqG2rBwzJc+0lPOCFzZ9xgTvAiEAqybFJ2SsSlIpOC0TdkSJR/WUQn+pfkuEr+prn7Rx2ro="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.0-test.1572112986555_1572112994875_0.870375965801359"},"_hasShrinkwrap":false},"4.9.0":{"name":"ts-toolbelt","version":"4.9.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"9a7a0cf8ed15abc17f93819f68b675e3cf86e179","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-DX/fLvu1FUSnLF2ttf/8iEh9wYNseHAA7vPMNt/5YKZfOgeTfTOeOkUapdU5CkoVBwYM9oIyGH8FZVfkp0WwgA==","shasum":"58d670f5be8a5a5025e7181cce57cfe0089dec02","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.0.tgz","fileCount":223,"unpackedSize":240398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtItiCRA9TVsSAnZWagAA9uMP/3wQbJpl00QLxNND06su\nt1C82meAR7um5TLf7m+IUeI+Q6eBzK60YX7J9tMC3pdQt8NfiYHmZJrilWA+\nAyI8Vrzq5Rds6RWynU4G6dGFspRXsT9rM3LdrM6dyxPaGLkTfJlF2wXozMl9\ny4m9s+kQccOxVgD8xIPsFK/NQLbh0bncnT5alNTGUA+x3utQmmmXMTePzJg2\n3mIL39Vv6XnrEcRXlNQNuHYs94HNR3VzuW0TAQbJpYQ9/FwQZqxB0At6yqnR\narKhMfQwvw1/8UP1AML9jNlAbgCxr75j+QwIsxilgDZdc/fOpqt7PCeYoh24\n72GL/hTEkeB3YAshg/LS7rrnpgdQU1YFHd84VtYlmr+MO+sKH0Fs9KDF7/gB\nFVrohurYJY4IkNnPYUk/9GtOy0yaWGjCgbuKRPdoslJwHv8sKDrcRptCIF2D\n5WoGXpmYq2MB/n2ZA9XduAlr+QgxfjwI2GktfxnxbvcUn02ZZdt17nR1WbE4\n9yJPIwDZ9j6Tj7CJ7Kmj1DwAVcl1vpPOntz+btL8n2SFa0uCuQYkwSb4JLCO\n3vRnLnwdO5f2evpWtuBaTKle/1oEjL8AEH+qGltgeXQgdNrwCsfRSu7/v8Bc\nAmZOq2GbBRP93x6ItZ/tHJV5cOEUXeUoYo5bn4a9We3nQhrj2VlhLUGNAG5i\nCCSH\r\n=/s3g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICEyuERYO9pHRq6DMeuoM10yT/cS/LIG0WnF+PbUrrzLAiEAjbJwpqiGStu3XpJEGHEKd7/xUe/DEA2kronzRXZ0A6U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.0_1572113250120_0.06844540957689849"},"_hasShrinkwrap":false},"4.9.1-test.1572113370569":{"name":"ts-toolbelt","version":"4.9.1-test.1572113370569","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"63170bb7308130601c7d2a3b310aa395d7a34c9d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.1-test.1572113370569","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-l/FG6a9tzbW8n4SEh2rJEzlN+fpxtFLHfarfOzPgPP0YILHYoZ7VwTKAYlAl9Gh81iChjmQHax0DeGKHZzR5bA==","shasum":"cb2a29dd32b77795222f748d965ea07e5a954074","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.1-test.1572113370569.tgz","fileCount":222,"unpackedSize":240600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtIvkCRA9TVsSAnZWagAAWowP/iSr60NqphPLrdujAIyt\nVgIp8RVF5wqUzA40tvG+ObVkqhMDYkgCvklyBCYbVrrYr9yzKmSzD/yXlyH7\nymhVN7LitJ0AO/6M+JxEs0hWe8JR0F8F3nSBOAjfe3CFvH9JXA7Xc5qD6aWi\nlf4oaaMwTSw5CtXguh0tLvmFTbm1TNTV1RMWwpT5C2XCA/fuQy+Qnt8fCqxV\nA30KnC9o9Ry48HHNffRPv3mfqUKfZsXm+5On/xAZ1+fjEldUtmpHYU9N74KX\n7PNpLE8yLNhAO2fL3Afwunz7Cs9wfaIR8OCJbMi+DghFknaCXIwl/hAEPMoo\nkUhl4vDZiqEmbHYXv4vLKGC5yOmPRfUri2J5Lk+y/et73JH2JBVJUfeeY84c\ncQcpzu+ZU1FXPpCWuUKR1v3rmf/C3X1kZ5V/tOhFJPrEM3xwttMPDJ8A4OJf\nbZcPo3mHwZjOZsYUSKZU8KQ1gqIUXXrxuJHKEh5RSYta/a0jQMs9yUel/ytz\nT8c/b1rClzhBRl0UTA8qJ1b4szYnkPeVI+CNIezSI2F5hCGrDfUo+SMGpdB2\nI4s9CnvLLWuKyOxMR0kIXJyIiooxQaNq3vWVGJrBHTBislIeOlPgEwT874pT\n2NggjN71MhgbO7EyBXG9MXaL7LzerBw2DQmALxr0nmfQbe1gCePYw1hFxs8B\nKT6B\r\n=JxCX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGic2uod+u5Q7Q2y2TnUYd0qZUi3yivkNRAhqZgJ4KpAiBwJzzyiFHJRaivtmJ9xCWkfncjkst2GtRQpgi1gMmp0Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.1-test.1572113370569_1572113380114_0.6071069481347204"},"_hasShrinkwrap":false},"4.9.1":{"name":"ts-toolbelt","version":"4.9.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"63170bb7308130601c7d2a3b310aa395d7a34c9d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-8ZYA9vHq6u7tAT5sXg7SwBU2PoWq1U2zBUdyCHqlZQ8/o2ioNJgb5uQyOvW7JqVuaZi5PyxuhqQ860lXOoygKw==","shasum":"a56e1a3af7dbf85fb2a3950671b6b7460f1dfe9f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.1.tgz","fileCount":223,"unpackedSize":240581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtIzdCRA9TVsSAnZWagAAOxoP/16TEusn1dgk8+tD42ja\nJ5As2WNpEbwuRWE7PvBEsvt2DVCQXKyBtydCP/ot+Ao2C5MIYDeTmwvxl4wC\npudmerzGplC47eVoNYdaYsJ7uppc6yXfSE+gIvGx6QZLXq3xNWGMJ+Z8Y2++\n+x5uVL8orcNKjAABRdau8MoLJqp1PWq1clS57PXXrDxXaJNFtG9LJ/9A1QBc\nwevA3ErrFn1yKVMssES8yWYOSA82Vl3bNTJ9pgf/+BCfbNoozSSXwjFnhlU0\n5/qZblTE78uJeyyMQdR7im8D9wfTy19kcctdvdSQATaciITecidhZXITK9dq\nx5Uza56o06u0gtO5yxTHKi9aog3g81QI00WaDkd1WYWRD03i7RACx/ldWl8v\nngD/NN3h2nF4YRZ96+hAEkcHRnsAmTvwsyn/UMY5e/lSnV5IcAH39dNaU5m5\nMIoBTMnsXmi34JyQE3pXe+yGKLOA/ZdeuPWfXBm6n4WlZuwv4z6KeCuEdVoH\nme948YcLEMpocDPPcVvejDgenAXfecNA2Gnofl3WWJSYkqZbAbtCqiDhsP71\nUzN3vwHfeRsrLSlKshSt8fuykKqNGxXT2Qy+6P4L9ybawoCoqa+ssujb1ztQ\nMJrg2qxdEYIwhycaIdA0SQ57kV6viXuANpNM1Pyd23Xu6xp9y5tuU+pv2fWi\n5CBZ\r\n=Bv9Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2Uxl5d0f5yqLNN+0Yp/rrgjawAq6Sp1NygpFhe7XbPgIhAIEIIjEBfsX8ei1xARehG1VN9H5TweKSVS3Fcstg+93V"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.1_1572113628902_0.6483645307530805"},"_hasShrinkwrap":false},"4.9.2-test.1572175447561":{"name":"ts-toolbelt","version":"4.9.2-test.1572175447561","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"729fbfba28aa8ea2468c9ef28963da8fb8ff3afe","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.2-test.1572175447561","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-jx8ZzFJu31Ie5+Z4Wj4V0ovPaJkYOg84sPE+1QzTT3rvggsN7dcluQo9G0O8oxZZcBDpggH3kE+A7b4xtFz2yQ==","shasum":"8efa2a335855897d89c1ec3ebdba693625a6060e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.2-test.1572175447561.tgz","fileCount":6,"unpackedSize":261617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtX5gCRA9TVsSAnZWagAAQfwQAI9FLQVX1sa9AZtArndJ\n8J5IVDIb2oyW+EnschHDSz5ZqqqQfXbzNgmi0TiQej3KHiEvJhbfRRR7jzkq\nX2V01TX+hrKyNYK46+hraCqnjKnlYkrRpGKe+75RPSQc0peH7TSWuUD9JfHu\nhexAA9+zBRHMCa9j1KZvwns8sX4smbx4xni4+Cm92PN5sVPZD4lDQmKLGIfG\nFErw8rJZhpONeYFO3r2WkZP2wKTQo9hsYuOjxwLLS2QNBF81Qz7mKLkCqaGz\nYXE5rw4mmAgfOs/Y/LjrNKrLcE4X5xkQmVj9woGQUuAIWIMYXV0Czflophb+\nFKG/6A4iNgKJytZWUq8xau3eKNHB3XvM2u2tPB6hHgOKthtOBCopslv4tzQ8\nIeMs2pDKLZ+twAHZutfBnhbSncVt953lc066eJgN/KB58Q4pUq2bpYI+Z3nX\nVHTRY3DshqgiiLDSPZesG4Y4YicBmB7tTZFwvOiLHxnsPvKOOqE3X4KVYsVp\n/c2MgODgMh3emOnZbu/Pu1HxVVB33GQGx3G4cICIXgP6kROtg1bDhetdlD/4\n/mLn3CH8NCYNUtGJoHcrzv2TlQxNiELyjdGLYSJjnpaiyvDFaBZjPIHEgz+u\nGc0Lo6riZDRPtpEofQBM+HE39h5YaFy83wAypuh3ZujOi4H1KTwSRkQ0Pq7Z\n22Zo\r\n=e92O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3mb5wk4AiP2I7rg3FMZaSWIA+zM2ymcSwgJEhzd/AFAiBs/rmi/xReS45ydMvv0s+S8T/j1bMvoXzjmEhJUffZFw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.2-test.1572175447561_1572175455999_0.7758537896755464"},"_hasShrinkwrap":false},"4.9.3-test.1572197436263":{"name":"ts-toolbelt","version":"4.9.3-test.1572197436263","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"1b7eb4115ba89bcc437357a8b0941f4db85ee269","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.3-test.1572197436263","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-dHgsjQTVSW++0gebZ7S063PUDXai8O0pQQn0fYA69fNFQRMpDyxEXXbw//TogrrOsXq5Cr78b7nPTIJY9P29FQ==","shasum":"3f6bdf9c3bbbc0a8a932f147f9ca689a5e62a40b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.3-test.1572197436263.tgz","fileCount":7,"unpackedSize":261934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtdRECRA9TVsSAnZWagAADYMP/RCEhtdaQiducTx96KZT\n6Q9Utf997ZYZc1KfhmUgw6Eqo105B8393LJjXkUPC1E4f0UM+KVQ2XIOv15U\nlTywVurMBtRpsxaVqmHhm3xXHk96DLqOhNgUxx4/2wPybwdwPiWE8mI7ftbn\nCRS1SbW2aLbGdLH13MRErGWvL4YA9COWfIU/J98e3RWiFVXAaH1mOsz/XIe2\nFxDQsiMn7oukblYbdjMsJVHhYWWJK/WFbLHd7/kS2zoljaoODFF33Zflqkzo\n3LqeGiEBLVJvXs2FAWDIzqgfwPAZA/bTAUUzbSQ1uvHVY+Dtrmg43ENfRpaE\nfJhZQBbKsTKoPzhFVsjwVOBUEuoxiI+7mxb/8vJS7CESbNTIzsW4scDODdKN\nV/MRzZdG+AaQh7WtclCobBM18AzmAVGIvg1es61hl05bQh9U70VvI66sYT8K\nKsMx+fy63tHZvD7zpOA9tZd40+d/IEP/hBvbBSLzEwXaY24uQzxGUVOG5D1X\nQKuYvuxZVDbgo/vGjI+pIdOBenZ5A96X8w1ArT5ljU7MNxN9pr0ZIQgo877S\nZziuK3ZntWWDRlJJKdk+aCP2tVias36903aNrWHu5uXHR3KPPUIl7c8EelGn\nU9MWMMSWljVt4jw6zvhwsvehKSjkv5FCW7r1cz2tyozRPytJMSJwZhvMr/8A\n+DEk\r\n=gN+j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCAmGrVcHI0cagxUcwYvtaVKSDpGaHwZufaUAVNsvgTUwIfE95dcjIpVZ2vF2TA+uvPCT/nuatxPuLODhY+NVL2Xg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.3-test.1572197436263_1572197444352_0.1480696622678499"},"_hasShrinkwrap":false},"4.9.3":{"name":"ts-toolbelt","version":"4.9.3","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"1b7eb4115ba89bcc437357a8b0941f4db85ee269","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Rq7C6JorhrZnRwg/SZNOEdrdSLv6wz8zZJrr/4xiQ5tQ1DQ4m5klnlzzq3GxWRNrgoxi3EQwavV9ofU5zefeew==","shasum":"eb8c4dfbf58f3048f124fcdea642fb8b1c99afcb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.3.tgz","fileCount":8,"unpackedSize":261915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtdUxCRA9TVsSAnZWagAA7dMP/jYyAshu3c2y5DXKEf3j\nqlHB8emKKTEdLY/gmg63sw8GIKtEnkQJZCCkAKuILCt1r72EyOhus49ch7qh\nIGFlInG3aEH7RxfzBhYAnYv3dDrdnBvvYWaeEoTbZ/G3mpp2A4eJFFo3Sy1s\nLTOrSrNTGcyIwpqCiBpPGYJ1mWb4Jh/7bimUXs/ukdhWTJS7E/CfaOTHqiuX\nlDh/V6UkXLyE3xd/QjFFmnNE3uSD5Ge7gYWrvKG2vHBFVdevehDzKXzejmyt\nJ8W9wiagOh/+s2z1NtxXG8j/3xffklMmDB3mx/eTWGyTpTdoj7nAqvfCXGxw\nCRRsabXw5NkD/HrPI7GRA9K5Lxbqko92gwD7EdokKUy8qyt8Aeyei/ZBrFzR\ntt7MZ1OA9bk7C6gtbbvSl6TqwcHNlLtEnjr762/S8Ly/lr2tve1oSamEbEjO\nXriEr5uNPejGEMEq2glQyluLT+UPU5MW2FkTGm9G3DLqJhGg4r9ldFuvKoWo\nK8cxl2JEZf7mHKDmChpI3T2E8GwCSjQUKsmPpnqF7sQJ7YBQumspbQSHaZZx\nbnNAHTJJvljooXvQMYc6cBYj2aojrScwzo0jXuYcyDNPvfmkfJndznIKFAiU\nb455Zpa6dl1E4rJW9RkKUkMatLgBbc3wJxB2CjQOQ2jiFzrIz7ex9foZHU87\naCog\r\n=Aer4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCwTjvmA+YgMGVgakGrvnYDx9oEajNKJVCVf/W2Ou47wIgf46rbInt1RKVhaKglZN+Jca7uP92W3LVhqT11elpZKQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.3_1572197680574_0.46384037889126817"},"_hasShrinkwrap":false},"4.9.3-test.1572197942207":{"name":"ts-toolbelt","version":"4.9.3-test.1572197942207","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"1b7eb4115ba89bcc437357a8b0941f4db85ee269","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.3-test.1572197942207","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0o+W6GBsxjsV9zvlpGrhw+TVcIoU6RWfxGvtE6pB/RSerXykPP4P6U/zGF7gfF93XLGUopDYmmOjvXqgm5l4Xg==","shasum":"b2c937213762bf6a77968483db6be7a9255567a8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.3-test.1572197942207.tgz","fileCount":7,"unpackedSize":261934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtdZACRA9TVsSAnZWagAAPrAP/RqDKW7VaIPYWe6ffQTF\nIhDY8otpWEsFMitKThMAinjeZTheGbbfV8a0D0OMJPZY2aY437oJa3e55ONH\nReuoDa2CbJkY5JS6rnu7woPn/jzAh5zcttkRuK2BuwvkdjhIvXGEolxzbmvj\n+Ii6OaAkvvBH6o4WqrZq/0VJZVvlOHEW9lf5q2blGMMJQuq9IbdJxrS36p5t\n0Yhlteo+2mH1w2dunuhP2EdP5G5ySXm2XXaTXOeNWu5Q/KZmcXFANTF3M1aG\nBdxDTml4I9JmWsrX9Tzry9wCyj/wjKmIb5K7zWcCtpp+G4w8eYvR82mFaDSF\nKyAQLa1r3N5ir4ekayXZHjV36GFyeGYdJkwTKwbzjdCutFjEVqE54+ZvdB3z\nfZAFy65UnsWWO8yCOZ1YagoBngDWWD3gcVhdbfAdvAjR0fcnpGo+kAQWHFvt\n6DIH/LOOVPP/yJg1Nnko9LTHRNLzLiAaquIBCdv+wk+i+Ar+6QvrTidX63CC\nBpt1tkRmD+y+uB+a6n4P6+bpUo76GwXpIdvba1HmyHAG3lkUH/a6TQtHSRlG\n9RbMG9YUKObRmt5RDRH01DBO1zoVmvU56BXDgg5XmGXdAM9MCDH/Iudm1MtI\nUAj6nPd8VTtLhVrz4SqanCV+8gAMOYDlQ7oblaR2fJxhVPFJGJoT5HXS/nUc\nG9k4\r\n=a5UK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSPfw260OgDCo7+E8KLyB7TE2njFnq+msJL5Y3hx3A5gIgIaMBKxDwuzZtqgpuanw+e4ZtGQZVgMbvtMU5G54y+CI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.3-test.1572197942207_1572197951742_0.09812889271517311"},"_hasShrinkwrap":false},"4.9.4-test.1572198210185":{"name":"ts-toolbelt","version":"4.9.4-test.1572198210185","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"621b1fc4ed5dce6126773b5662b825f60ed146b0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.4-test.1572198210185","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-8Rk93B0oKODNaSdbm0YxqSOwdoG6VR/3+LcRKWYKLWCxFj6/k2M72MG1SYXsmKqbECBAX2IW6uyLSJe52KNWlA==","shasum":"2ac9b063d783acaffbe53c647dceee1ee7eca3a2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.4-test.1572198210185.tgz","fileCount":7,"unpackedSize":262025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtddMCRA9TVsSAnZWagAABdsP/1Dcph4eJj6B+R+o1yhK\naJ57ifGifTWNRYRxjdmviNGwMGQZ3E4pvnFH/IzmK9UIDP9b1tz5l7aflxJd\nXray8mbg95FZFovvmxg5guem+BQd4sFQmwypC+RSuEEPYgEKvRtnpYMTDMO5\nnXyk+yRvuJoyfT0UXj6Rh/5nxtCPfmWZJ30y//egDJ3SudDeumfgUCdOZLwr\neLT2gd6ukxFE3OzxGIMFYMhIRIEYAybdlTeoUZLRMkUfSN7toqfcb6EjVjD2\n4JRqXQw7inkUPSjJYkNPjiGviiG7qxQ+9kXRq7JD6c+TYfsTgoqE5+TZhWvO\nc3k9DtPTf7OnZLqWhxbrPHqjgx/CkBcO5lCGXt1kbkTmAZS0VJXRXnY5guik\nCGb387UaOTVdxWvarWeICFaIIvoufIbmDIwwkipxdGEA7xgU1wIHFGPyNTgU\nN1mv6q5QgS3UTZr53eX6jsARYl8OJfSNXpEnzYf8WGMeTEk599gaqHKIjOGs\ndS6gPv4Iv5VuuHIDMdXPEULp61dzf/EzhUCHnw2hlc1HWUd8C6XPJ0vWV0Y2\nr/fBO4XqUILBk1L88+48eeSBkGqippCxbSiTdr7Ma5CJKbUwFrpQf/aHjfkD\nX3V2xpIbOPU1t18p0f0O05sdu/AVJbs5hEKyCJK6RDI4SC+UWiZLyBPjmdMA\nCUzv\r\n=gm7D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4ebqhYKy+M5sMfZtwsLkt16Neu+AIZnN6aRZAtiBPoAIgfR2f/dDI/tQlqSbX/Sh451to/XIFbq4+Q29OFGQLl6M="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.4-test.1572198210185_1572198219458_0.9234214654918858"},"_hasShrinkwrap":false},"4.9.4":{"name":"ts-toolbelt","version":"4.9.4","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"621b1fc4ed5dce6126773b5662b825f60ed146b0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5svWC7JNk0MGq6ko78rHNYUEXO8QAMFSOFKGiTXLZHEnLM7DapI4IbIhIOqUt4tFzlMPxgzEBqgslybVne3shA==","shasum":"ff0597de186046d8d7b87f3e4dfe5f95ad1b8ce8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.4.tgz","fileCount":8,"unpackedSize":262006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtdg5CRA9TVsSAnZWagAAVWIP/RLJMRfu81hy0nsdjxud\ndYqKR60ZtimwNuv/JOWhdDxsqegggredZIKbUN4NvAOXkZ4GAkeVVQb/olGw\nnMKiZAsYe+eCYs0P78HLHjgtUHqm1QrEaCWfEIYZJOWoUUniWK2tlYBKOb7z\nDbv8DvlFZ1n7iILQv6Sa2qxQwSWmbAdB6uW8yg5Ycm7L1f66NLu803TTCF7/\nPmvpztudnoIWR6K8QFfSWSmeFYRzHZSDLi73WZl2AHo/iZQTB7XvBfU8DSPy\ns4LWf0MVHejphut6Nnpwv+esUscLofeDKtelyMhdtt3fyH9LNDBxrHCddwVy\nFCMIGKC1fY22/OSaQnBmZ9k4WMkLE5hmMfXl7YpAzG78WxYbfrKfKQLILUhT\n73u18n1MR+r/R5WM/anMjZN76u7KjHK7zLPWmFXo4A6h/iKbOlcnMHviLKvq\nzRekDnwyAQ/GQRfZKdD/LOH3cZhh5lDmdC9wTHcHRMx+4AcGT32OdMGw5Es2\nlLXthSSZnjqlUW2tqwLYvvwGXxvQPPz+pTuZapprNWqKEU1I4QaJNEg/Xige\n0BXDU6RfVJff+yor5b1+z3FOPfS8u8h0BWoh66XhxjjTMlaFVn6Q+iYkIAMO\nPtqo8YFrFzY94TH0U6+s8Mtd9jj1HRH6mrqSZCvYOiFm6Etq0K2ix3nvAfI2\nWBPq\r\n=z7R8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4rpyGa8bRvzwlc1aWXjrRMLdwZ0RBPge3nHRrusARjwIhALOuFWNAwStORFa6Zo/750ajJtD/c4PpBdXmDefJDTPj"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.4_1572198456770_0.4199249544859054"},"_hasShrinkwrap":false},"4.9.5-test.1572199212121":{"name":"ts-toolbelt","version":"4.9.5-test.1572199212121","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"566ac058eb3e473b2d62183b68ec942fff11bc5f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.5-test.1572199212121","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Kfv8h/fL83A5byKEArBHQFc+HCWQad8jFHLpdNWxhNWzXRABJeOejkmdXONqq1IikQuRYw8v/9dC+hr1XGS0aQ==","shasum":"7f9c6beae1a7acd1fcacc043c9965e5c261100cd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.5-test.1572199212121.tgz","fileCount":8,"unpackedSize":262504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtds0CRA9TVsSAnZWagAAf30P+gLgqlw5DF2d6d5Hc1ze\nVMLSoH0xCyQaIy4ehc8/JvQPllruGTCy/+Dywp7gC4Biapf+jjln6+xLIeWY\nZl7hVCoNg0vxMNHUT0n8xlCu4+XyKciHkjZs6E1Zs+4YqSRrfU+Qriy8cJzU\nqP5CcSk7Lf6yQJMmmrO0tFymKTtJji7cMUy9RzqNuOLMBxReOhAyS7zLVUfb\nL1/JGLvcGlbelFzD1hVMUCCFUy51WcdT11VelLJ6r2o/RH8/wfZYqgaagCk2\nWydq7g1e14HypKBvIcXF4x2P/CrYUYgb/CM9Zci7EBcMxS3DpVCRY5mlRyI0\ncBDm3l0ss0mVx0z2wGBbHE7+WOxiUzPJmxWzsHbN36rel/ZvynmFlmq6pMJa\nlXlloj2Py4k8J+6BZAeiXDqUWCAzR5Ij+iDP3fV9/WVOhYLpzRijrGRAokob\nyPkSeEqqPBDyVHyojUAyRTuZM3N1Opt6SYOBMY99kCkUjvY/UNlC2ql4+J1Z\nAk3w8oU+oEALmZLPyNbR/pUdEF+TpbhcZSex5DnVU9f3nde/pasRhIai6JK3\n2QphHl6rk7n5l918FY7/YXykuIMGCoWucWL4A0S0sszkDhTBBfDiGc1awsTK\nbcyDYHXv0skWHShYeyDykfUR2tvhMc+rUN6Mnw/e/DY+tEUAzCHUfm2o9nIm\ni4zI\r\n=oMHr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE/VAN80iW0KDFaJXl7Jo7xX/NOdrSCBwtURRb6kiEB1AiEA8/NYNKjqTwWI2WddV4UBYy5/z+L2Ki4UjxnwRI/0bKc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.5-test.1572199212121_1572199220335_0.5327108535733274"},"_hasShrinkwrap":false},"4.9.5":{"name":"ts-toolbelt","version":"4.9.5","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"566ac058eb3e473b2d62183b68ec942fff11bc5f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-y+Isng1TR10TaEfM2+cP+2Si8oBBfAw1N8cPDKeoylN4C+BQrUba4lLWoNA5j9eY7CvUT3iOr/CPwsAZybqmZQ==","shasum":"3c087322f12676702f96ae463b973c56e6502129","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.5.tgz","fileCount":8,"unpackedSize":262485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtdwiCRA9TVsSAnZWagAActsP/RRM5lNLaAnqi/C1+2LZ\nXIngyncy3gBKN7kzPuQTb0G7d1eOYrExnGPw9qvL3DUd1x1nVqNjWQK0IwJf\n/DWpALlPr35q8cUtT5t5UHwP+XP/2squnB41w1AZrSVt7f6ODZE8lOOnF2Ok\nY9ua5Emk0x8nFzQxbWrqVLAKf7MqueAZq7jmxCVNudMtnzDj8EZnUtsCbqa7\nnWHTioAIcGd+wUbOo2dJLMCRs2pzPRCl9Fx4axZD8oJKhsjNMz/KgP04SlCH\nXU5J71+1DS9RrK58niB+fSQJYgKw24ijfK+9djR7rsn/3+nw+BqOex30vrJ6\nfRJcEYRd1dpuusIoaSzANfF2z9SaL26NtT8n9Lpmd8jJG7JQeVsSzVgBl7ln\nAhMTukUfQDz79lEhVv6a3JfztrQwQRBFu3VM2QvTyPR4jgnWPXi0Rm/WXgZp\nyzCvgyv1eBYV47SgiIuUE7tL61QcgstBDpGoqAhF6oKfb6tuw8pNRQxeh7z+\nXyBiiAZq7GEeJ7q5qNnkxVsKWUDjfZNbB96D+QYnzTxyJhsrg+xPTFJV3kAP\nEhpTqbFwmiRM4zDFG4smRnyyDI7+U2zN2ykYK4WDsO5uk7FzI1KW6xg1IfBO\nXSBIwz7KyCRxV9p7zi2vszPIMnvORp+39cRB7alP+x3k0BuAz3l12s2FkljL\nRA8u\r\n=28Pa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvJFF0537BRtZHnwmctMcEgqbwVwQjmPqhzFMhEDUBYAiEAy34TXvqWJLIO+hCe6GcnByVhCejjgb0y2EwMxnO2k0g="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.5_1572199457587_0.6591415253158108"},"_hasShrinkwrap":false},"4.9.6-test.1572199612980":{"name":"ts-toolbelt","version":"4.9.6-test.1572199612980","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5f3233577071aadd161c4925c4dd9ce7a25c917e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.6-test.1572199612980","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-92xSqDSqwhrJevgKS9jQ6Yxj0vpX9ie4ARRajdJ/ceC3snZ+MJ7s5oiadZM/Mu4UEG4AaCSHprL4HK8Z5O496g==","shasum":"82a0bf1ada4c85fc5b28071f9b10cc3bd66401ea","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.6-test.1572199612980.tgz","fileCount":8,"unpackedSize":262979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtdzHCRA9TVsSAnZWagAAY9cQAJXD0HhhqFo7ktxsomoY\nX8Z0fA56fi+O3n/VRDW4BudpfHvF9r/kb2MgJCABHHXdyN8TH+hDt8aMWrwf\nHDJLcten/ojyJlKe94ippxVYvTU5mmmqpF0xh5u9ZK79raCbto/mfDtMDJfv\nRHfy4HWbfz+2pKZ96P3winnDWY3SVJwqUkAKXJriD/Li3Jnh1eJeakQnlACn\nAeZAB2F1SP2OcBeAsFczg+H1ugNXUimN/NjSoIpPgXxFphxlFLq+7YQ012pO\n5k4fG7396DEu0frI6GyIVyUx+Pg3G6Nx6TGIFuHvzeCrtSdwm+UjDL5tAgQX\nPpjrhNh2alBf0MjoIBK8Dph1Ya/uUYIvjX//oSbAvXYlWWVbrYz99b3WwjUR\n6U5l4RrZDCnz6NVHXmSn423oqIh+oDnH1KB2X26YOahvhWrUSoiNx3o8dLQI\nUcwgSmrhMLe8s2N896k/R1X0FaN1TU7oBZV43bYng0APjyH1f7nm0EfgEAP6\n9i+sAyYZGEBvzvL0AVdcvAlhjXMYVwy1Mor9wxumqb8AvJSGIlmU7Uw8usXU\nQIL2Fz4xsOwiSEujROqiTv6d5Bp8nWlSzv7p6eOWCyp0jkc9WNY8QZ8MFQ9m\nTF7Aguh5zWMilwwKerhf6AtKG+Nd3Zt5bPAOm5MS3dOaaCD5g4IkEmrC3yos\nP9Yk\r\n=oSl7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrpdxMadLF4uQEXw6HKVbn6Wz0H6h4oJycOwcBO6N44gIgOANuHBtaYN10jjUjdST7U3kuBeBBKboIjDXON3NcmTc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.6-test.1572199612980_1572199623436_0.16777117431652044"},"_hasShrinkwrap":false},"4.9.6":{"name":"ts-toolbelt","version":"4.9.6","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5f3233577071aadd161c4925c4dd9ce7a25c917e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-if6v1nsYnY+c3PlYNpU1bQ7SE7VedcEMDlf4GiCuv9dpTDZZ0yTU05adg6Dp/PAxDAfzq1EAYqNNi02ajJPnNw==","shasum":"3c27aaaf2469430869108265a09018c5f7ff0eb5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.6.tgz","fileCount":8,"unpackedSize":262960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtd3LCRA9TVsSAnZWagAAwBcP+QFySCf0VMLKeChFZdOk\nc3ABRvUJIl5EkyJlB11AawLLPH8F145aBsnjAFBGf0T3ci68eDFU2AzozcPW\nRrYpaznrWisGH7Jt+jfxOCme1BzQTyYvYVDPjSZTCEQr8g7PbU0QuHE1HmzP\n+V0z6nmgpYWM8UFe4KzrsJ26XqXypWE32Q3CnqZaqMo/ONyqFz8yOCs+sFlJ\nNtl1h8kivSv+d+GcNe212mf6OKEOwKVeInNmWehpNczFmF0608wjqa3/Pn4T\n5ZQt4nJp6/+v8lXrSinI2/Cc0Ril1ZquXdMA1fBz1wX9RS8DBoBU5M1ziHCP\ntbmFtZXOssrzdEyvY4isRMIu5H0gRbMA6N/yw7egL/2i80HuE1/cERvAHF73\nSDz70eMUCb6HogtcuJTpo57mNJrsbRMSQzn5ARSzBBPt6ZUxS1e2b7oO+WoB\np/WG+dIy88MMkzb+9H0Dx6kCPEyu/FBmoqj7HKYjmJwCw/TtFS5DKWSW9IZm\nX7rjo+mzXPTFekZgEFsw0ckt2iLD/E2tbLFHwvPOUWfur0XcF69UsOcShVQ7\nW65e4haK113sZX3NdclAcA9oswdDXGmttByNpQ/26Bw4bFMdHeZ9FWw9vlYM\n+sLiElageMhIxWvqlbrTRek0ySJumR6Te+lLsDc3Ys2nM4fRI81UxN26sphr\n9Gzy\r\n=Ic99\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGneurrZTa7kjavQoMGB2AXqv6gGceWV1JabtYWTspZ9AiBjxdQ0Iv0LJTXUl90QwAy3tXMEdEc7f4zN5BNwBFCzUQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.6_1572199883067_0.3536273913660408"},"_hasShrinkwrap":false},"4.9.9-test.1572201789137":{"name":"ts-toolbelt","version":"4.9.9-test.1572201789137","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"bcd5e4b35328ef66887327b6b95099c6411ad080","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.9-test.1572201789137","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-s87flDj4IJrLz/jzm9hfB4EEGqbmsvinIIaCFOqLnMkVn+01b/jCdzSlFMlPGQghwzW34lgV14riYxgMKamwqQ==","shasum":"bd07ddfe33c9f057661b3a71889f4cf7f2590eaf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.9-test.1572201789137.tgz","fileCount":8,"unpackedSize":263584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdteVFCRA9TVsSAnZWagAAW5sQAIWV+aS6UHf3JYCPjg5T\nwSeWaG69zMQhozvX3nV5aQWCWRhNS95B6Y+HqzYVvV76zWm5oVOQebt8tOl6\n6prRDVt3oISqCkoBzHzXqJo03bJ5amIB+ylMJRr346z/4OXjPrlo02CCbnZJ\nEu/IqgFR56H5RxhwH4rU7FsGTVCyHSUY3luE35sdnwGKBsLiyf50Gx2OBWye\nRj74sSZqws4Nag2NdAB1AqlF7KU0xaP+iK+QzKNzDMnKj8p7PHfx6HHZsCN/\nUKoh/9e8HjUU6VTjpL37uQbslk9hJY6kktNiGDIMAndpv9oHzseD6DAsTaOc\n252sRj3hClBWFTHIoKeahtItMPXqum6dcAbSpF2VnbvAmyrqPZaQ7ZAO/4gf\nbmD1CFwPTMmofbtwvQ+5heNSfK5Jwc9VwHTzMZ4OTcMo496k3adq6S2Fxrd4\nwIBDT1mrlwVIAT+bqVF5qu4C1qQLDrg9p4Bv7/irpiBZcbE0/sp7rDZk+Smb\n4qIM6oDjN39uiM43lC9XGYUusHrKMX/V6oivHXQe3u1YDoIuz8SKcfLjB4Eh\nPoCGBq1awog8iaVFVW5GsZmBIrB10OommvhWwd0mzMF4ktvMkd2RmUrrBlMm\nm/Qj8KMb79hpyAtkDJAoAQIZSiIvn9P3gLK0nIci7Hl51UGOqYfmV1lY3fSG\nqo70\r\n=hm6U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7Pe6MNHJPrrwiOs1ILnvpJzHnasSwXu2VUNBPgVwK1QIgB+TWCqytYgQKcizN0y3LFaBhA0PB58p5g4mR8Ubnb+U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.9-test.1572201789137_1572201796766_0.3899975124660542"},"_hasShrinkwrap":false},"4.9.9":{"name":"ts-toolbelt","version":"4.9.9","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"bcd5e4b35328ef66887327b6b95099c6411ad080","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.9","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-syHEGzoVahm9PoUgeN5Q3d/Dcn3nHGko26Zhxq6T9WfOyADgrg3OXP/Fp6GOpfuZt5Ln9IJW+zn+rQ9C8FqeIg==","shasum":"1a5870096430a15f5a694d53c40705473cd7b131","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.9.tgz","fileCount":8,"unpackedSize":263565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdteY7CRA9TVsSAnZWagAA2woQAIKoTLY7LFUg+UYM73Hw\nFMLAP3gg7zLp/6p3RiRynTg69QieA5olSr8HzhwS8DEeXcMsVYlAuI7HvGT+\n7Lbu4iMCeLOkVD9uGBmS2R6voxmapmjcPHqul6m/u6fA0DWiH2va3YTSODNL\ndOk0EcplRlFQqD5b8W+WHfTUsBtYfAZnDtbqXiHvy3p+pNLd4VpYsbV1Pssj\nHrOIXtzkb74FuGK/UjEJLVidjoBQPqT/p9NZ5DwZS++rTWJCG2XxEdc4oGOK\nXB+viSoBN8xsdDNhmggX9gRGGQPg47FPEWKHoQovLDp8EhEPFyLCFqDzWQa+\nBt48JERlWjA4wBl6pa/WG0gMtWlKvvaBAYxn6IIEuPeU7WSCQ+yXkFmCYcj1\nrw8Po4clvLIsmJq+sy+oVEmnZGIHDPFiLAF1j+r9mDLa0NQsBimFBz/AtmX+\nQHIPnM9U23WkJ70m1cwMfwsbj7hlzgBYA7u4KrlGu3XPLe/KJwvz1BCZ2z2P\nXF8WO4xsBfF/K+Uo95kyeF27oxRHiwI4Xy0i7gKph87neWAkPC3kEoCKJxE2\nOJJn5631UKf2RF8uTWxgcucLHq9Mypfq7dA+9jdhnxjc0AfRbHdT4aYBnFFX\nVk0Iv+siC2jXh3XDc6nl54VvXhpcwwem6lrHAA/SKNwy2XfRiDAwkzzp0Y1k\nHkE+\r\n=UAZw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmN8yuqBcjsixKXwYfNpWBBB75/2I1nFllGpLscDcPiAiAFI9nL+gx0u4+YbaP3x75HqEwSBXVQDiSZP7iaVNJRpg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.9_1572202043385_0.06324804734975542"},"_hasShrinkwrap":false},"4.9.10-test.1572290522801":{"name":"ts-toolbelt","version":"4.9.10-test.1572290522801","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f50ae1bca46fb4e86463e7420107a18f2064a463","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.10-test.1572290522801","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Fo6yPiIfYo52vsitDfnSIYKUv/ERWap6pKcV7wK4REhyVizfCygb3JIcJAbsomvX1ZtjeJ0PL9V62ZSxulHj5A==","shasum":"c7f6bb5089cd8ec038e493530740bf1c5a95e4ab","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.10-test.1572290522801.tgz","fileCount":219,"unpackedSize":242581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtz/kCRA9TVsSAnZWagAA30EQAJlWkBVl/v/2YoIcsYW8\nC7ctnl3KUnzD06vK0EKjRK/4yAXvAQFhdRdQ9g//rrfvQ1zlQyl7mF9SoZ24\n5sXIJm3YU6m44w6fwzZ9C1L80UvJVG8+/OkDczCuXFoNKUTVq4C5ayr5sjPr\nr6MhT7bNp4BBCZ3qXqxS4P1cXrunceLnoHInfj7BduVu6vDdnyVdn/j+fkSY\niAKDpyljVjq5JKlu6IRVEJzC5smu2OFGdtHJ3STi4OQ2D8texupmGcrEbPOW\n6BM7EzfuWVg0YuQWGaadnI27BZBVp+QQYsDQ35GffjO7z8fW/0JQLw9YfC/h\nDU2Yb1qT5c1fPdOWNQgd7x+4oL2URZ8SUCTg4ReTDVuPyWTHpqry5mbBGfUw\n9V/0J4RQloOHiEd6ValXB3NTInNRqrDOCSFlHbyKrtpWSj4WgLLnaG62FJQI\nAowq7NZOT5KHjnHqlPt8497QQgFs3ch7nYvjjAWwWG3mX964zUReKyX/6UiP\nsOIK8RVyAfeRijmA5vyK4G+FjcaNpIogiI70IZava+BvH/26zRFoqx7HqtLL\nOvDl+i/VlCO4D2Fuxu/2iKNvezs1JnHvHm8oTzgJL01/Nbid/GYjw+zwhDPi\nsUlXOZNJyG9nVF+b/D/I2Mh9VnaY7qwYLYE8XqMgRc+bhF5XpxbdgWP4Ssl5\n2KTf\r\n=HpyU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGJCCqTFqEivOeqhTbo4CUFoPhHBJPCNfwIbacILdcIwIhAKzA2MrvM0/tpmNnkSUe5jNU367PLdXHFwo3Nl//xiiM"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.10-test.1572290522801_1572290531605_0.07692532684618247"},"_hasShrinkwrap":false},"4.9.10":{"name":"ts-toolbelt","version":"4.9.10","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"f50ae1bca46fb4e86463e7420107a18f2064a463","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.10","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-3bGUaOA6l+9eF+l9O/cqdWVfTP7zn+ErQb0wYPLGtvyQMx42892PgKmNaGDGdlFTTyqbAjBZwvMAmhUodL6+Jg==","shasum":"4194224c29cd46be50642a8d3021207fe867c985","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.10.tgz","fileCount":220,"unpackedSize":242562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt0DuCRA9TVsSAnZWagAAaf8P/1CwgMFTsYFtkTLzl2mx\nXMizjUIQxtaavVY9ToI544LWRSkz9ADFWmG4S2ZHQ4kx9B8lteLzicdtfqJN\nFw0X/P+u0xLKHUQo123/d+fetZPVbWDpoXHy+egXsZKYX5Bhgw9JljuYIgLn\nltiRVO/DEvIqBz8leHnNCmVoL68u1mEN0kbRXUZ7qfftoF0FmeiHh+5MaLlE\npIR2YHjmoIR8HSSmU4wTI4TXx/IMFYLH+8TO2LWwovtAwuUCeE98EwChblTR\nBinQM3KD8qX475Sf3E4X6MjqMR9G+xOF2AhCCz5MpFoxWgJoQln4KATWi4NM\nUa/jgwgaqoO+RSvbDfu3fn4CxHyS6gABUas+2qua9++xtolbvreHfdK/QTw6\n7ElCmGBVNC5BWUNFGym8gcR53vHTkQHRQQO/duSZo9sIvTtGu0o2No9C5zfz\nvCSvW4KzJaw+mvtzVXopgfgd9jJW9wdOiyzrfVqNiQ/zJqnK9tpKTeEAngIr\n2qAk9mqrWU0UASPUboTAPkTgWtw/gTWH/5ykqao7Jca44X83lY5AoaX+QAPH\nsSdwPlaC4TZqv4rVfDFafQrLe3hOYZ6UrFtRN2cCNYv7bC8lJBdKvx+W+NOS\nbHPtK0hsUrz6zjQGmOAzdXoTeqlBeNgYy+DSqw0RK+q/LILDUfKjgLvNCsfn\n1ool\r\n=awIt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBMK5Edi1E+03Xq2zkeF/ngGBo+4DgXwtwwC9eDFHeRAIhAM1bpOwmiNz9cvS+TT0uf9fkVG2ez2hC2COOBARM4Mhl"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.10_1572290798056_0.8288373983148181"},"_hasShrinkwrap":false},"4.9.11-test.1572301514431":{"name":"ts-toolbelt","version":"4.9.11-test.1572301514431","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e2789f9bff1ac185150cd9a0524a5be256174c7f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.11-test.1572301514431","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Ub1JEYmdyekGv8FTJFS6KzhmbMkyZaDLnSU+N/DqWCILJQVGy+dMSmwJr6K0GjVrmC1XtGKPXFB7n0aOyhioiA==","shasum":"46ab985297b720ecddaee89cc57479c336e7024a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.11-test.1572301514431.tgz","fileCount":219,"unpackedSize":243438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2rTCRA9TVsSAnZWagAAKxUQAJB39ZxhJ6NQkMNLFqFZ\noJDBFyopzcOsnShdkYp0BMC0Ch3tDMjEK7nbuT8l67+/H6KmdD/jOKHiSinw\nmFqe62LASgW9OPEDgLZZnxbbvPkRdj4/F6xWopKidCyepre89xOoRwv4kZyg\nwt8ZnXq93llyVi4bblnKYWG26/PouDN+tI8y5BKIbJ22JR+l4IKQatUXCnKL\niiIgXJN34ZidDtVZyWYfxo2KwWRRvL+cU6rf6xmv+zre73itk+W50g6B0K6o\nl/ir5LMVJWzWjS2b8+WH9998I0gFAaFIaY/EMepD4vYxCUBW8t8+NGJk7HyC\nCY6P6CZSBUaSRrO+6vEjTadPuiWo4/6wE2bxW0dLPAXZXlekbcodLbi2FcN8\nHzJpCeNxa9EVLH8dXPlMlb528T6lP8V3498QpCIxdsuoa7JddFpT0s4Y+7IC\nvWsgyD/Fsx7QO7flAxRglD0/GSB8vtyjakBKzsJQm3ikqAJta1TEP9PoV0Vn\nw6FMCiBoku8+zAyl8WGMlG3Yvmht/JQPl/mcMP4CLaG77uOufvlV0lvlXlTe\n+1pI+HA/X0qc5n/S630YPUL2af4u2qnI7HYuS06gORu+PeweWVJbNSq1sWfP\naybqRlnCDqeRvfJ5rOBPWgFlL8xiAFDFMmkRjtxJQ21nVVhwRha+OigyxQf+\n8M0I\r\n=6s2V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAZyt/4Us+hItpEbBhAjzwMBYtl0POMqzk4e6YegEHD4AiEA7qk99BM9zsa9y+MH/MNyhNCFN8fh6eaal3m3HK21tIo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.11-test.1572301514431_1572301522912_0.5329377604353447"},"_hasShrinkwrap":false},"4.9.11":{"name":"ts-toolbelt","version":"4.9.11","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e2789f9bff1ac185150cd9a0524a5be256174c7f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.11","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-CmuH6XncxGq/Trl2LUOxNU+mJ14P06isjH+2wvBmUN20ioD91rONz5PwuxaE2IvTfgJZsQqdu50p/uFn6bGAbw==","shasum":"73af9e9ffd78329fb6801047cdaccf55ebe36ac1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.11.tgz","fileCount":220,"unpackedSize":243419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2u9CRA9TVsSAnZWagAAHYQP/iTm8phbZW02oX2DzB5H\nRGHeuLL50j/01DbZGzj/v8cOJa7vxY/OOkcGAkTO1IzyKioaj+jpwmnRx5a0\nkOavvLuukrV4w3iPhxO6zUSD3H0hqIEoTohiY1BvLtJpM7PXfy2PIkj9ClSP\neH5ATXhpYIqJM2mqNcZJMBfi7UQHr4P8O5bStk2qqaUmO6exdzKbMqQBrBrh\nS8a0/SKPV+DZ6HE4EvAI9d3dxt6HoReeoqQtWJgCvycS/6Uplv7E6YtiZ6DA\nhMveupZb8fIvB+93B/mE8k+TCy9+t2GJv/FPnBktEZi1kt9Mwi4F3AZTkmCc\nngyr8q1yJymwAp/On0wKy101iovVm099/sZ+hz1rOcEP7yxJUKu/ELYhXTIz\neAOxL5PbDCap2vkH0avdKqVPD4JZLPChgLZifC/GPjraJ8GVbPsmCTviPcGL\nIFc4AmExMMG8jR/wucysJbCcrrh/Sg6SGbrze2KhL7eGoeghqz8ccVFgmAxY\nPD9lHhAmerj0g+UCQc2X4fKcAL9+0baLXlQfNFpoWB3/qVu8SJBS/zU6JLfw\nqO1M3hkXcRijVZbIjnVnPcBhJyh4VQNN9T1I0va7LTogrj7cjqiIlVAjKRlJ\naQymH7NXJVZlCFi72tSdWgvYqRGeZWTSPURatGjqKLZZfqnztCSpHXRx1sWB\ndOGS\r\n=SmNa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqS2hi+zPGsaTSxPVzL4GVJ1VO5f+EknT1rLvi7bqO0AiEA3Qz9rhcxnw0/cqnH8NplkaebXcYyUm6y7EJYFmERUJQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.11_1572301757036_0.11487343806802452"},"_hasShrinkwrap":false},"4.9.12-test.1572301805695":{"name":"ts-toolbelt","version":"4.9.12-test.1572301805695","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d2c6ff08679731194a7d42e7c654d44e1da5b96b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.12-test.1572301805695","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-sbRgF0xLt4ordmHJgz7Hnkz03x/AZMLCAB8Die8lUm/8runJBtUoNGhynZOr1I6bvS+1d3hgILNTVTOlH9qX1A==","shasum":"3fe73a2463ec71ff83cc1207d13916a579c7f614","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.12-test.1572301805695.tgz","fileCount":219,"unpackedSize":243532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2v2CRA9TVsSAnZWagAA1MkP/j7w3yVDNK8q1j/pJ0K9\nCzMT1wTnvh9tBuBpqD9yY50GLdc/xSHZSVh7KInCBflAOYqbxPJE/M+dY+UL\nMdZgn/j9uGJyxzFWAb5ymgmflsYAlx27Xgzl0aDvMUPisCUyPm+0HkSCyl6/\n3Le873qqs6UpgPDHKxe6Dqb1wzLHRt6FMwHTBTVUvKu6UC1kAoHiwnIrRkzZ\nZjpvdre7bmKdt4tGpv6GSaInd71LAFCtLcxGK2qtevT89FIqIt0q2iYMKVdr\naAKLLd3XOMKQYqfi+Dyv/bIcOZYPRgpT7nj0n6LyFcdc6u/Z+YmtMnfAuCiN\nEWTNCy861hxootmSmF4cggOkIALDflL4y6E0mPBuXNi6lPb0MmVtmYPRq5wl\nRcXH8Xev7YiBja1xQYikUcnVRGB+ULrmpFMVxSh2+eH/am5Lcl5rOpYu2mYe\n6FHUNT9QXPWV59G0fz5D+MvLgGDFYSLbNhoc8aSNlWo+88VabCbSAYBpf+na\nRwKMs89kijcQ6++Y/w8Is1DWFDlfmUg7vJ0HxSWTDdH7FDMqSu1PNuMpOm6x\nzQPUBVBrL2TqDeuqZKvr3vPV+3zik+l1K71I6vCgivSRMyxUeUubT6X289wx\nw4PXrBS6RpjhgbgTg4YTin3AFKO+P9i8uVpeeVB4d0OEnVjYsyaJWErfc5iR\nw8Qw\r\n=VrZQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkY5WHIv4treQWAb1eeC2COBMPROzDgeos8R3xkRc1RwIgZxMoB1kIyS/8VPDdSXo9HiZDCoGfhg9P0myXpVhf6nk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.12-test.1572301805695_1572301814224_0.947391365948806"},"_hasShrinkwrap":false},"4.9.12":{"name":"ts-toolbelt","version":"4.9.12","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"d2c6ff08679731194a7d42e7c654d44e1da5b96b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-RdJLQdlWSfShTqv2XmUKtJCsNMtLvKU0sZ4y8n/07g5hPTQ04LqkBQ3yQjJtzAZ338ExRL3zcPcrs4n/aadlUA==","shasum":"88e5e1ad3ec63589be245f7b664243eacae617a7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.12.tgz","fileCount":220,"unpackedSize":243513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt2zoCRA9TVsSAnZWagAAaVoP/R6Ii9xVYEzguQZQWoRA\nZswHNRSMfczinwrlzc/Gn9iC+53HDW+doE3pSXiNfBfgsqbQIYpObRHKJtlp\nF+A1oqPOHGsXIUEm6MCTHRKXhGAOqIGLZXi7h6WYFL0cT968qTVgVk+rqB9r\nerTfBl8y2zE4SqCsQ42ojj/ejnmnONfKo2X3Q3RCHVofPsx+1pfdo6S3Km8S\n/Qa1/5hmDqPvBwxrZJHMXKQjryKUlh983NwRAkpI0w0khzfltrQD/d6Wo7r3\nJnRxyWwMxXwV5Zp+yMzAt3YbRQSg5QpnUcj7+QBiE1eLaTmS5AW1rP8khkQI\nUnmiUhaBicTTfhi/ORjoGUSgj0ggscgT9GjY+KNcQAlHkC6gjYH91irkOvFF\nOj2bR0xzSsNJQAdQk5MPJIxDRlhNOORRsgpEhIc7zu/kbASx+SWfqKWMTA95\nCyJXux2nZT+HyRczRt3ECi0zfcDO1G5p0dTXRbD/ew9p1kcrMjvWjopswtU3\n4EOaxf3mJw49DOf99p0ZOkJMeA4YPJ7C+hTnyFPp4/XvYl70HSkrhhIygug9\nIWY+2Ifj4Kv7rqqK09R3T1NCMb3ko0J6aGZPNRNSveGqtJmSx0FSdd8b449P\nc5WSP+1SAUOFrW2oakDzdDHzlTET7SdMdOQGNO5lt/SleFcgPk6xs5KZ78d9\nzR6G\r\n=BYvi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+kfGYVhGHCST/VwxGtHwCfhEsm6xUUA3sJiCxuZG1hAiAtr6SGTitXoDQkbEK5N10LpRSbeieCogHMzyN4uHpndA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.12_1572302055975_0.7880896575153697"},"_hasShrinkwrap":false},"4.9.13-test.1572302708710":{"name":"ts-toolbelt","version":"4.9.13-test.1572302708710","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a5fb473fefbad8afe930346e5a81b5634ae9351a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** place.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Software that's more type-safe, **flexible** & more **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Types can be **combined** together to create new ones!\n* This package aims to be the home of all **utility types**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... and so much more\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import * as tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.13-test.1572302708710","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-T3Dr1iI4mqtEYRQTStmp4DkkT2zokmcfW8PEZQ2HwCwoqheZD3FiChKuyq8BLJotvXJekk5hODxTx1oLpa2Stw==","shasum":"e2ac0aeb94a2722db09113c47505324cb05920e1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.13-test.1572302708710.tgz","fileCount":219,"unpackedSize":243807,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt299CRA9TVsSAnZWagAAvSAP/0P75HPXuixuLC6PocUf\naBM7lJr0kZ7RCJU6Dm/kOlR8luobnUvoQdwT5laf5d+J0F19a4IAWtPJk1H4\ni2pKpLfK3ILu59B45RelpXEnJGnfDsoNkzd+wopUKF+/1gKsSkbazNhupyAH\nl7idzM6Zqb1jXOlvDofdCXwBNSg1zLcbxYZkkVnbFOVPZoOn+tCEsHp0Kkgk\ntF5koFVjYUW2WfDUYwHNs3qACFAoIg/sT4WBViyDhM12WGrkL7WSd9fBovum\nyinpv5kl6t3CpjO0kf1rM3d5i1lnmvkHz4ABnpGjgDzCpt55U739n+gh2h3/\n/TrAn0Xh6uyGx4+KMrLb7kCuCYwVVUm8uDrcYunuyhmylb7TeKQlV/H/Lety\n3ZHJtAF5nbnFBhUsyOp18zkF4YYSmRAijjSHbdLtHUCFkoseVLTneo3DlAL4\nXo33Si1wT2wzha0zXj2S+xj5M9PKIdxXBViFGfSLRSIts18w4kTriX3YdncC\nOAxyMLJ5rT+BckvJxDkLmljtDKjngUmmqFrwZExoE7bjv2c3Ju2pYSFjngeC\njaDM4Ql4630poqlUhFCv3UPXj2sVvKQzFvVYyB3qgQ8lPheUzVypRIAjuG5u\nF2/PT0ZNDumU9xaRykn1Th2t9+RSYdk56hSWbVuKWDUcaMuRxOngL0O4+BVT\nJAvS\r\n=g17c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEhjb8+uxEBX8c+ClP1e/8mkzPaic47W5seVC4YodlwqAiEAqpKJdAKyA8in2751P2Ha0seB7eYuajd/5Lhbr4Ht940="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.13-test.1572302708710_1572302717319_0.4004444197086068"},"_hasShrinkwrap":false},"4.9.13":{"name":"ts-toolbelt","version":"4.9.13","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"a5fb473fefbad8afe930346e5a81b5634ae9351a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.13","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5qWlQPOCn9kCqkD5FKxKSofoV9hRl4XzNjMObctcSSFWglOQ5zXPcWI/DqLgwboEHV9n21c02F/QkATVtoBUNg==","shasum":"695ffa6c8405cf48eee41953a6e82280f4bcbaec","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.13.tgz","fileCount":220,"unpackedSize":243788,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt3BxCRA9TVsSAnZWagAAvDoP/igOk6GEw+wlbEUHvKkB\nlIY2z2y/h49Fk41E44kzvmc6asWUUGIFOHJplzflnkX6RVDF7zOh/tuvRD/K\nMpUXy5ymlkTyHEH5dUme33kWfLaXSTI5IlTXcdBr85eKhnEp2GMuzvCnuP10\nzLwm2UOoqbloyo6zmNu6Rca7vHfOztRUb6pFSKZczLG3fI1ENi5O/tC1blUt\ndFAH5g/nWcdt4UZHlulr3wKNiBhVJ9Xii7FSmJ5RrelMuB6MO8VomvzLWviF\n3uTv8b7hLfUqa1wX4c5wwv/Hx+aoSimh21U+Wc7se5+4KjgwfOHxO4PUZQv4\nF7GVRGtxMDo9jOXYcyAU4j+xAVsNlaCiC59lE2TR+9LB+9v+LQXVo0UvndQ/\ngacFPDImHtyQbLxqnt/FPJuGNwOV02ubWjKHOIW5l6zPPPc7glLxZRaulOw9\nGPXITFOEmddwbZBSi7Noi6fQ8K5fgtwOgR7OzaNDf+LbloI7VtBkImbMlmQu\nmp6jFZ5gnYvWKkGLJ6I7doP0JpKsAxuuqhMV7bPjXgKkjyNVwuHyyHX+5tQQ\ndv3CjNgrVEMPRcWD6v6KA2t9NjPyrc1ppbADx+Dwh86J2L1ECNuuEmgD2reZ\n0ZvO+LxLqnS8P5b4+IdsXDoKsNeNsNOSR7gmz6t/Q4hA+6q2AxadIk57AfFP\nw/v/\r\n=BIsD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICEX4V4SVLMUSQ5btheAY1iGY9ERAJAnoegaAQQ/y+7GAiEAgOeui74130ybjKo9o9Xt/GWxgxNAoi/Y3xadX0C2/Mk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.13_1572302960364_0.08289582324439282"},"_hasShrinkwrap":false},"4.9.14-test.1572347487415":{"name":"ts-toolbelt","version":"4.9.14-test.1572347487415","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"436aeef355b2269d90d50b4ddf1d4a76cfff6e95","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.14-test.1572347487415","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-lEtRHrFhYqnhsrW2ofzgg30B3lFCJKye3AQu8nFKUvIZeG8wn9YNs8q9l5roRPJSuudxCHZgVcewaUXCeKPlgA==","shasum":"01080da99e6c538509e2b9dbdae872c33a31635b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.14-test.1572347487415.tgz","fileCount":219,"unpackedSize":244037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduB5oCRA9TVsSAnZWagAAFfcP/2BoIHXU42ZjI10mfjaR\npnmhnpJH+nTRaSI6ofuADpLnDPSnBzR3YXA7fVzjKSbjn2M/Nv2aGIh2QSRk\niXvRqXAv5tCgTjCIc84RhCEekq6w5grPcBUxT/D5EKIoBpYy8Ga7zJJDFuUP\nEZofGTjYNUJg5Gv/Kxkz149QNbJo6t+yclytzXp/6WXRHxDscVbZlpVg4xpC\nfF9u/10cpaRhdOWFFyoWpriZHUpYpzxI29CTAqG9bbmN50W9ue/7vNd2gvfI\n/4t+9sOVC9NlWo7jPfG5X2D4T4nTefg8OR5N+GRGmQ0q9P9DHljymvevgR+x\nH5ypLjE/3wLC+IeqqsVVLNqhQrngTpitxWhS5/1UV0vOpes5aPfzzWDbDgYt\nskE1C6QprwhoLzq0UdZ1OImePyf2dN6lqTnsPYxPoNXA1dQtAYu2R23XRwhr\nPn/dJa0WH5TrDdk5+psBMTyGAaX3X0iSoLjM2RicjTjzuf2TIaGXcxDVhxir\nnru/2vdTchcC7YoZGjpKB+kDkAYqc94K2mNI6OarSr1UyzhxyP1U4Fdjdzlo\nkEGSWNae7WxlsYWdpdodNlwOcKT7ebOneIVfajkpJgXN+J/g49EWXr+6FDjT\nHwWwHuC/uJmDzBR3joWp05hj8P0Qbp/RrHwLuSMSsT6W5r5BEaRn1N5VIS2n\nvrRx\r\n=Jz6u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiJiF489al32eZmp6U2oGA+pX2QLLOkU4BC6Ndr6C02AIgdPvosZdtzppAD9vN+5mJNQ5QCKxCdZRDEBhHH/THuCY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.14-test.1572347487415_1572347496420_0.4122086589951939"},"_hasShrinkwrap":false},"4.9.14":{"name":"ts-toolbelt","version":"4.9.14","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"436aeef355b2269d90d50b4ddf1d4a76cfff6e95","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.14","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xp84yyzqhKyYYvrLbdfguPwb1wwzk9HMZwM4FLM0B5ug/UfSHCEtDYzMXGLRn6Xa1pVvWiqa9pePp6eOZcwRkQ==","shasum":"22458514e7472b8e061463f0e7192a2cd49f53dd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.14.tgz","fileCount":220,"unpackedSize":244018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduB9PCRA9TVsSAnZWagAAxhwP/2jP2MJGrCdzLJH9mhOM\nEFDoThfDSNRQaNjpwVGX6gtUHTuqg7hdgQubW8u8EUwLSDVy/5ZTWA0Wdc78\nsoXj2Xw0sWPD/dBoLulYoxOKusjybgJXjoUTqE0yhYZRmfJL+6pSu49lPXW6\ndHzrSuKsjY9D2jvdC4czamTABk0xPdJU+x9FJZUUlQvv4hU0Jg5HokHcCKFK\ngwIZlns3BXFmMuZq5IfkvKCS8LO0N89kdfdj2p02+tsrNrkE72251KCpMT8E\n15uSm4Gn9vEYZ4+Kc23l2/18klS58xUX9PPTELPJtzcxwWtmaVjVw0tpf1CB\nlgYp5opIuEqPF/F/vaDZKxN/UYDPBpSTzD5BIFpAaTmCg0RQUoxHQiUGnFEJ\nYdDF+F08Fs6dRBpBiLNZkSY6zZcaMXpoYWWrzzed8EbGef5VaWI8k6TmVXIQ\nCWAsFvPYQva4fu4HdiQieXVUUbRG1shlBpZ46qsxqugdqOjSd30sptJ9aji7\n7NW2iNxgPFCJxe7PavbX/VoiStSDcFYDnX1/cu5mWMqlNXzarl+lhfrAlA82\nt5CN9588diP8GXEQTitpENLpuWwfcRtaygma21+WCFRJp7KGAUlBfVEVa2mZ\nrNpt76yGh6l873YUCC9v0syM+ve00RNyc7I9X5LdTMaL7I85WmjSKIgPJL0j\nTnSF\r\n=9cy1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8jD1wEQKdJ3Qgc14ph3w4TLRXbWZhZbqd5rhuh9SOpwIhAIc6wLilBkB+4YhcL8j9QcsC2BGiHRHYx0lh1xUfflBQ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.14_1572347727098_0.2524392870543475"},"_hasShrinkwrap":false},"4.9.15-test.1572533396101":{"name":"ts-toolbelt","version":"4.9.15-test.1572533396101","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"da1daa394f663024522a37a18a9b32354ac9d6b4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 All the types you need for TypeScript</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code of Conduct-Contributor Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.15-test.1572533396101","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Jn4/TM8eLxNmznIUHl0isH9MoH18pYrdIW4z8IPP/3Fvnj1ppK23JRH42zpHluPfPh2MqaIl1Wju9VqzIYU9WQ==","shasum":"db1d5a5b01a1850ff62bf32ad302f64a29ad7dfc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.15-test.1572533396101.tgz","fileCount":219,"unpackedSize":244455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduvSdCRA9TVsSAnZWagAAX1EP/0hUnslQ+shcBkZ6gB1e\n2DbAuYNH6/pSAefJGhlwpuUgMqRNPxTqoDP6JCVj3IWRkV0PWy5034pj2X4K\nY9vKsLzUMQZivjNGgfsZYRlgiazLO447jHQmcorSxV6HQPLNnl81LDDpECQK\ng8TeEvEhohxjdhtZa+wWzoVIOBl39tS+9vlixovBJGphs52voHzNU/a7PpdL\nf4nLXKxKLTKOU+fE+inB4yc40QutI5Lca8mkajIO3Q769aUeACPK0iah11XQ\nrEU6qri3bUaKvWGcUwpNQG6e90vD2V83e9noTjvJ1kQqgNQMZMgH+QmUWCTm\nWUf6V9OK5CPLa0hajmZZ+rZhXLw8p+o/dLaDQnJiylNAV9z17e4hQGLkFFgS\nMsBbAQRsBmbLi3yL2uTuBe6s0IR/PvtR8+2v8WUq9F8UIdwuY53TOp+1miGU\nPDjUXuf/5xHXNisQwvlbkd2IoMZAZkhEU69r5RsBSBo5UvHIC/neKkZ9KNjk\nWzw+9JSoEzenF3ZLM/T7q2iEx5nAhVfx4Zqro1slBshjvu3zRE126JrFiJLb\nfBJAVlN+GO9wRdtF/fpT1geY52xoWyutJecf/eI2mcbSgifjUAayVE/t9wnH\nM1yrVxxJwgKtRyayAZoaBfWDGIZB7nrXNztyKVLCLGCy68AtwQHjtPI259c0\nHjrC\r\n=FcmH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBs7NITPRm+Dt6iwbv6HBFkVchV+MTaxiPdE7dgEca+rAiEAsGxVtyBhmRyBw0AGRVw33jP2mCf1OPk75Q5fPX8VMuw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.15-test.1572533396101_1572533404740_0.7054268802934813"},"_hasShrinkwrap":false},"4.9.15":{"name":"ts-toolbelt","version":"4.9.15","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"da1daa394f663024522a37a18a9b32354ac9d6b4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.15","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-K3su2JwaXRR0gDOw2UpkFQ7z5sym1/b5OvWdsQTug0MgJMO36DybtEsWjSg8HwnpC8Nw6QiYvoEFQgSWuCMhcA==","shasum":"2a2c5127cafa870d41b34c0e1d0b0564732b34cb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.15.tgz","fileCount":220,"unpackedSize":244436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduvWQCRA9TVsSAnZWagAApSkP/3tFrdCm68qEiegGiP8b\neU+pth/StGOQd+foejhfStcaE5MJvudjWxFopdBzqs1ZBWehBvcH/ELp/pc/\nzltzguCASI+PgrNquHY2gT0GaXRH8QIiHrbGQYK0ye3jIzSZjEHasFz4Dezv\ne4IbCRRGxUq5vHD9zMr6SdC71tpo+nw1mXmz44GPDeKKYLJ8IFa16yr39Q31\nmU+wtuVo6v8kB9RDE7KKu1w89am15HbYNDWVUmOGNtsrBnsrVQWNlUjWvufC\n1jgIbORIGbmIaBAdMTHoTL+uSqegW2z9TYxTXCIfMM7TVgNdzyjNmswm6pXu\nNMIegV2fqFrg5ZBOna76vx17FuyKI/I7y8UfjyJZNxUKF3+L90xNBKkZ7Opa\nAz96nCjNaeHkrJwD+6KHntkglOe+WeiNgTge0OaXFao4ZDtHf0jeRq9Q2H4D\nJsnMRWWeIL4lQ/lEOyQlWZaZ1f3p9kZq4h9vOH7PKvguZWqkOwmes8DtMMFK\nh3egOk2iCObWvbyFOhMdk6dkBfvzwStHpbPvuPp881e3BmBsQKRm/CEwWLuF\nNHNaa4JdiM+ggRD4MDqF6NpncBOl/gexkI+mdvCcOgTklSHX7HoPnU/0yCf/\nPMuAC6z8pGC763Ye/ZlxJrLM/DGexmmMK84Jn0F5aqtYblqv/CEwEdR2fOhB\nSScl\r\n=DcZe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjDNw6E74DH60wz3oRgR1jxuN9uTvPge0khMsWsnZDRAIgZWtItzQWoU4jFrbjw1uAmnXcokkf7tl7MXxQQuZmmVo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.15_1572533647633_0.46089809084844346"},"_hasShrinkwrap":false},"4.9.16-test.1572536896605":{"name":"ts-toolbelt","version":"4.9.16-test.1572536896605","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5605670d19ba8b11a38c172746c36ed1ebac95c3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\"><strong>Explore the docs »</strong></a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\">🤔  Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code of Conduct-Contributor Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.16-test.1572536896605","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Dn2VPwGAuvOCFwvk5gkpIe7ctRkNzMVON0KDK4DcfPTcL6F39+2o1o0W47ol10Ecx95Ny9Yg07YV9OXHqiINrw==","shasum":"48d96c359643cb47fd047105ff80873fdfe21170","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.16-test.1572536896605.tgz","fileCount":219,"unpackedSize":244710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduwJKCRA9TVsSAnZWagAADZYP/2AR5Cl9gA+nCtsznPpP\n8l4I+m/DqBitU5HhCkEfEYxZ2bk0xCdN3Fbs5vM8XdWjIUSJGFSSeeycFsBL\n0pta57GPvJ10YD0TzfFvUhyw/fII0/VKQ99fPV/e96oGA9KdrpTjnIcNs1nD\ndcqY6fuj1oMnWZq0vXISabpyEfd7qYOQ5s6oENVaBq39TOVQ7QZWSGeOqX5R\nHRuzu2W3rwCsjmAAMLfQtDY/ekjFhB7N03U2rAc7kT0ndxepDXL6zfc1RcdH\nHCd+HID377v9Nq9/wZLkym5o192PFmjiHsLoTRmcopwuRSfuQS6IJahtJ8AK\n428dapIhxskc7hbELH5v2UBneY9b/z7OnXToR+e+fYgm5MH2XDheemyeLkfp\nO7wegKc6iMnZWuH8a5hBmlIEur9Naiz2DrU1pheX8fh5rr0Td35VV8Y+BT/a\nuUeI7VX9OgiqYz3cqZxDEevnHnI/uKpb1iy/nEmSr+SkvnFXSChhMTRcIQxk\njc8je4LBfJzG/glRWTy7wzhOEgFiCIYbie9fdce+5BOMPCp0PaX0AEpOWy4R\nOHUqo8ZBcvcmgz5ajJJJHnyjNPwqhz+jfUAXBayPlXMO5BBxOpdiniO4ji+7\nH8cyxrFCC4gNNRmKzkkhCjZXh6J6SCa4Xl/KYp3vFFOyBG1x/JopuycjG6Jj\nvNiA\r\n=KmuU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEks5XQ6/HzkHTGa14QbjKYWa/NKT549d4o7IxjC9JKTAiEA1j3WlKaIXQYfwdP8wxy/W1IZZxncun/si9zAXLDy53c="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.16-test.1572536896605_1572536905485_0.9079158103685305"},"_hasShrinkwrap":false},"4.9.16":{"name":"ts-toolbelt","version":"4.9.16","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"5605670d19ba8b11a38c172746c36ed1ebac95c3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.16","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0+fz1IRYB6OoS8IaRxwhhJM7pUHYWv+P4VjF6M+8akHvfgAKsxeDjabOlz7o0RiSyTmAuPSHz6ICwTEla2lxjQ==","shasum":"e80d5324297737ac53c9903e60ee2c339fec2044","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.16.tgz","fileCount":220,"unpackedSize":244691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduwM9CRA9TVsSAnZWagAAxagQAJTKaGIQrIQiEezh1Yyw\n1QJxw+rEHuuqtlZjhvwz0wpUmMEVVswrE1c9Nood80JLvYosVzDdIibS+HHy\n33aunpHASE0CRzTUbUh8eu3ozFcsNx2A4pDtID5niAB1wesyelWqqEITdzKZ\nMKcykvP4PhYDgANsBcrn8XSXQolxlloqLaflTPCslR2W8rMORZ9WwXxhzZw7\n0ooYdP6cKFiQ7b2GgYLcaSP2xXg6FVwiyUfaufT1FhoR0qXbSYTqYkjeUQWk\nHrQFBd8U/2LmjDXGvolDdHw2s1VeWLkqrzXQ3s/kND4u1g3LmpEaxsuJ982t\nUj/ozaVvpy9u88YKFj8VFpKaR2Wql73DVhsKODQgCaNI8A1DF0WuPVBKi2Ly\niKSSewRHqojLi1bTBLJ2sadGcNIQBccVLzkGnoR8YMtZ7CXnKpRj9/PqFsu1\nRw81t/V91pNckghKf2sktj0FIEJWToBr7df5isZm1L+wlxebW4QFz0nIcXyc\nyHhN6Ok3AmFpA2R72zyr/3Uk+usHRcUkRTUdNq3bF2/dKupu2RbtPVF808yh\nhkd29aeim9zIwo83Hbvqtted4fXkqFpvfK0BNluPqb3q86lL2Zl1m5zjAsiK\nuOuQsKmKoFwSFJyRR+fKQooDhjD9WU/lI2cq+84s6/k8SBxU1YnJ8uI9ihSU\nLE6S\r\n=wR41\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFygsGlWLUK152PPtB5nVCipADDGQIEmyrScgn78IuycAiEA/FzmESFZGlSs1BhKtxDP8wuY0UxTb60I8OW9D/T7AeE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.16_1572537148852_0.19940272634801093"},"_hasShrinkwrap":false},"4.9.17-test.1572539573454":{"name":"ts-toolbelt","version":"4.9.17-test.1572539573454","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"986e0a14f36f0636b463c14382e3be3cfcdf4495","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\">\n      <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/docs.png\" height=\"25px\" alt=\"Documentation\">\n    </a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code of Conduct-Contributor Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.17-test.1572539573454","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pRWNWqss+Sf7eKJ7ZwG2j88Sf//ZvUt15A2RZxUqGpQOmaD+TFxtDkmT4+2oUYzBHls7dMtGW8h1Swl8mMnc4w==","shasum":"aa1aa095438ff9cc10883e4599e7884064503e86","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.17-test.1572539573454.tgz","fileCount":219,"unpackedSize":245154,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduwy+CRA9TVsSAnZWagAAfVQP/j88UxY02usBww09BKt0\n98O+EszDbRAK61892Z0A7d4XXQgSm0ZbnChNhXSvdKrPzHgB9VT52ozMLCnB\nTFQUtQtEQIkbYq5gG9FCLNv3Fij71Rg6WU3W7ze+aMJOKnZZTyG3uYHvqlQF\njP4u5Tt8jCsLHz/GonVtHt29S7+qz9vvbcFb75J9GNwrN/yVEl2miXTA0cj1\nVR/n1R2M7K60LJcWzxJmVh2E8jB3W5olZ5Bw7d397O9+mTWCOV4hNhiMj4I5\nwfL6tdj3EAAGVx2NO3VW8q8sN4TK6ZbwVOEPJACoztE6UQLOEQDO5N98++1S\nXKauVQfPfrgUSi4UpOeoVcJyFoKLyINR6Le2AXQu8A0J2acZH3PqZ9D01ox0\nn+A/6ZIc7i1CZTVUsTO/2/iaHVCosKvHbErvvrf4RWSQw5IBNnQ8/e+Fo1qX\nrBxvT/qDAL63L/cjUq2WDPfP2IJ8xO/dFfPBVa6z+WORN7GsmbwM456n4Svo\nB9e+WpSQhJi1NaYJ7C2kvlFKqaakFbiuEoqwKQR8/VC0uWG9+tmCdUNulMDd\n2A6TbEutyAxtk88DCAcC9AxPezs3/poMbbPRizNksAXqgeEDH2CwSltGfy11\nz02l9Y7+LXiS/tVJkCg1XuSKfX09c7XF/bYk38nMU4FxDONQhsuhO8hCDU32\n5QiS\r\n=Qp5x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/vDuE17RgarR6xHgCkHfW96rNTvsF8yR+mZ98UrfPhwIhAKOr7dc+TlgMiZ7nq+Y8iMUhcNkUY/4LMAaN4kgcLRR2"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.17-test.1572539573454_1572539581847_0.09474016809348007"},"_hasShrinkwrap":false},"4.9.18-test.1572539768153":{"name":"ts-toolbelt","version":"4.9.18-test.1572539768153","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"961bd348cf295c3bf332a2e31cabf954560e5088","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\" target=\"_blank\">\n      <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/docs.png\" height=\"30px\" alt=\"Documentation\">\n    </a>\n    <br>\n    <br>\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code of Conduct-Contributor Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.18-test.1572539768153","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-vB5BXSZxW6eMSd5zXsbT9geMbnz5aqjwXRrkhKEA/GQBdHF+pct3PvdllLAWaSJdndoEGRDE3LOwNVfe937zBw==","shasum":"59fcab48fa14140de46f8683e7eb217bbb96485d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.18-test.1572539768153.tgz","fileCount":219,"unpackedSize":245381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduw2BCRA9TVsSAnZWagAAUkIP/048GNfLBEKSOBE650mb\nQKbM+hPtzc/38B874k86M0643vpvZJJWpyDkJEYwI0FJMH8Z/GL48JZKstzi\nycEfBWaeitno9EgadU7JUYIrt0XXHM0sP3cUhVbYnPgdFMXsbi6s/nCGKL8K\nLY/3vIdQg01lHcWqwoiXx8yuFgbdEKaJab7JmgmLrZRvtZdg3PRlrERzwPAL\nYOQkZhgRZV1gNv2zb997U0G7lgdeFwTKtjKQLouSTIeDup4m7D4mliAyG41M\nKdbjWHG5EeY+C8Roso0S66x4jshL4+JRbXbooA17A5j5UIhUdMfl6bMlNP1Z\nw8Mf0fNqK88B1Hzi7xax50FVvyoSDrxmdybg4x7gJ7qnz9ZhSq5MQS/psLsV\n78tkAq3apyh6I7GHZtczseKzEVFBFus2BP0l1u/D4MAlYOO0iRdEsLmjpx5I\nGlt+y0whd6eBSfZPgz7b0XW593FnYDxcWZroLzfTKgrwZyGJNz0OEdtQxira\n/TXkP0I9H0v/LYFLt1/Y/Dh6vy6cx18jHsx+HDBVlwX/s5PVKA087bZ1/dvL\nBR0ZTj9DUstBYfQwVff9QvRwHuQ9u1jMlBUV+iO1PIstDBkTJJY7HdmSShdO\nbO3GBiGpNTDOeOix5gJekYfSkYZeb/+cL+08s/LnWDntkNWrk0SQRkZXgYLC\nZy3k\r\n=ZJbU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaW7PCq6bsZaLHev4HYget6Q9ulOgkQPd978Zq/2/XvgIhAN6/SGM6dxKtTtWPNZsEQ6RIkxKzcqwtyGScbnYPLCZD"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.18-test.1572539768153_1572539777179_0.8664536450284244"},"_hasShrinkwrap":false},"4.9.17":{"name":"ts-toolbelt","version":"4.9.17","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"986e0a14f36f0636b463c14382e3be3cfcdf4495","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.17","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5n4DoyG0Rj0x5b4AOuBJASRZ/ycbpKaOHEH97bTtjBTcr/qP08CHFu8EBa6kwQjKJVhejNnzcdtDj6QA+FWyGw==","shasum":"969521ae2cdf617619fd23f30abeb2146be7e8fc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.17.tgz","fileCount":220,"unpackedSize":245135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduw2hCRA9TVsSAnZWagAArOsP/1Zd7MZqyTuzqqu0Eekx\ntyX0gndkcFsIrpQY0NORYTl/UPrzguO9i4fgGZzvgPWnAbOaM9n3bIQ14iWR\nPVqpKb5qtqvaFCkLXhWw2GIo8e/tDDDhQ0VQ3UOMTiMRZ3jJkqQh7sZov/De\nEqL4yjJx/1lWhorQJyItbLs4yr1Z5Ksc1Ue9CsPrjdoDDos7G1o4yvOG9OFF\n8KvDviSZDJnqKC1WgvMc9Bj/Zg0Nd9Iv8hncZnjL9uLn+FDBIeyKnpz5utDC\nZYhpfyA1RcP1lYK5LNiyX/psncOgLJfpXj6Sqgr8Fp7y2aRXD/DfpEfe7G+/\nIxJK9TF7unJoCmhgt3guEILtBeCKTB9jTgUdgIQk6BeuJY3hb/BoiCdcEZp2\nTsBAOdnKu7V1hevNDnpXYD0BVx4mlmZBW7X1qBHTDy538Y8PwsmInG2rEj+F\nRWoMVgN5/Fpp7teI8CWQcF3bWKayNQQh9/dveVxRJlk2oINNChYF0KVgEXNS\ngvYR1uMoZv6yfDBCBl089J53O9wXs50uy46UoZRjvQ0Ybfu/43L2ATJC8oAu\nxCqqJ91sXMP0k21bEDkt4AOZrjrYWD5ioqRvwHUdmhEmecQ3pfQDZTKhhM5s\nzQsR2HJiCy6NeFs2qYKOrZduxrmYSuUwZrZp8FFDNX2RNXPlU8xYGpUcwUw9\nHDK4\r\n=QDYR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzV0rd6lVU00fCS9/rjIzpDxVDBtZuV9mwcP+lrWPaWQIgdA2ttgBc9O+Zw4liYDb7NBYR4Dy7bKCZqDZkUgh++lQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.17_1572539808543_0.30354243220842836"},"_hasShrinkwrap":false},"4.9.18":{"name":"ts-toolbelt","version":"4.9.18","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"961bd348cf295c3bf332a2e31cabf954560e5088","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.18","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GSikxECY4/O7QR6faTDX11/R5l3dl474e/IRzo0lrtKnMIDdXlTozj/bUSkyBLEyjiUJk3WnmVjSfH5gRoLf7Q==","shasum":"e788d620974d18fb69fc4790625e8ea16e12dc9f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.18.tgz","fileCount":220,"unpackedSize":245362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduw5sCRA9TVsSAnZWagAAkMoP/0pV4u8hKZH05y/I18dX\nAInBk2DrYpseZNok/VgKLtCJpCcNH9wAdCsqHc4RXcBSmiLkE1anR9nYwtiO\nS/1E1TCswlkeiV3eQu1r3TcBHVmMflq8m9dZqTTJtYsN45I1q93tWgXbEmg3\nCdnu2omtHxw+U/2fkMLkW2HXL0SkRgSQ5ZnKE7AV2IHavO1zO8DExIinBwVU\nHKo/euueeSODCDc56OB4IIfAlyj6Uhm1smZlp2Zkq9XReNSXk8SOsVGF3xaJ\nw1fZ+fcCngV2d6V+UVRqYNNEiT0lhQ15E5EqHx9mxnoqegiw8ATd9zHWtXGb\nA6DwORMXOHYOEZvVeiZIlrihaF0TGe86/0M37oqzoZn1GtFRRaPQucs3+Yur\nrxklHDo6OzZSjXu+F4c1NQdEh9LfyPMnepkj5+92vUUei9rRYihjKMqCZOd5\nJaefFx0Lg3yO2vHEhSl9r5mV6avYUCHJ6p4sLDTtVMLl1UQHBSBj7qBBmiD6\n9pmJY0/ftEF58uIUnRCmxvlM6ay/YHlFIR+PaRNdBHq9yCIgd82jQPa1iJA4\nqlcv+vTaa/5ArQ2JeHK4F9kPbwDU00lhsicJtACcfLG2fytFE7aRTsfOXse5\n6MizIBCITkLu5bATqMC2ljO1knrQMLpX/W6NJ+LbakKdpvX85hfJOdZSBvdA\nljpR\r\n=nPhE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIBxCs7BRuMbpQq5Fj+cZNKPYpFrhP/t/5Wyjww/VRnQIhAIsshIhRnrQ95c4qM5T6K0fIJ6+1rPlYmOILy6NddkGk"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.18_1572540012042_0.4519016210228639"},"_hasShrinkwrap":false},"4.9.19-test.1572540030599":{"name":"ts-toolbelt","version":"4.9.19-test.1572540030599","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"54334f36e2f3ca6a8d866dbbe54ba84dd435c244","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Docs</a>\n    .\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code of Conduct-Contributor Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.19-test.1572540030599","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-LP8cT6YS52KqZbcL9fm7w0bBC1AChM/21gDYd47XKNtSTW6SrTuFjFDfMU9TXlQyNc+ZrIvF8F8h8SiFNQfu5g==","shasum":"ea7e1ed6ff14b6fe77adb171e3c29082d81f091e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.19-test.1572540030599.tgz","fileCount":219,"unpackedSize":245444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduw6ICRA9TVsSAnZWagAATg0P/3DF7YKTUSdegfS7Qv09\nxXbCXURHrC9UATDCGjjhmsPx0PYXqfdd1cjruxwQd7Qwk/DtBDRYPq06Psgd\npKJFh6YWlhHIu/U6GYIU+W0g32luoRKGHiQOdSWLv5rxCXAT8n3I9mB5P3vG\nGmFk62s//WTAAArqoMjvttPRM0IatlfXJwg0RRuSGuVsVnd/i+6Qeu/4NvAy\nibFGxXaQUfo2FQ/ZWJeResBNiOZKpCNwu5GYZA+EfRemzy5b4/6pTIbAViGK\nAUi8WazLEfGGqpfeanGaX//F4RulsgmVGLlk90YHNsNIQbzL5cbFN7Y6zLRk\nLbGIYXgwX3TUugJt/91ZpDrcLhdOp34+TBNbhN/xXYVVnqe41b4OcajR9kkx\nxdZwMf36PQeb1JG2/nFaUCRyYCFjW6G/tZvFPXhKN+Nn5sP6UQIiNdOGAeU0\nlKYg6H+Q091hqE4CrVRBMQN5CupEa/o76UK5jFC4ry3kbUOsRTxCizkHSeM7\nWzAw9ofawJie/Hzz+JLOJlriazAPpfFk7THjY2IycEXwbU+U69m7k6/dS7LX\n/xIT4Kjn4ouglXNGn5GJ2cKpScY9qyE1Tr1Ip3Hdn8nL56GevI5iBEYvdcjC\nm02fMQS9j9PupLJoWfNYndW3KDqwRFNBwQDMb/LYLNoNvoEtp2R2cXWCO+KY\nK5o7\r\n=PN58\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTtAaJiCZZNu9mjVQqyptGQvk809YJuD3/ypeB/kY0xAiEAgh4edVvrxppvm7QIES0buNk77bnXTgczZ7N/kcSWIKE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.19-test.1572540030599_1572540039520_0.5563173216883459"},"_hasShrinkwrap":false},"4.9.20-test.1572540162146":{"name":"ts-toolbelt","version":"4.9.20-test.1572540162146","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"aac770fbe820805d710ecdb80342f9ef6c3561fc","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code of Conduct-Contributor Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.20-test.1572540162146","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-7NUXniEFjQSriEyUyc55UMECN5zsQx+l0cqViRzn5B/PJH9S7ggTyQFK0qn4yq1E/QkvtO28CDp1r4YfbvYUWA==","shasum":"6079ee89140588d93d3aadb8c318061b90525276","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.20-test.1572540162146.tgz","fileCount":219,"unpackedSize":245663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduw8KCRA9TVsSAnZWagAAe8MP/2u8Jl98LsSN770U5xbR\n6/AXa0Fk4As95Y3Ze+TH6n0nzwnsE1Q7511UzOstucMBlm3GVDUjUSuGfcSQ\nIsL5JCgS/ZmkdUACtq5OtoabQLI1qEeQo7FNjVQczHj/KOxNCgmTUF1h0dr0\nMZ+XTTy1tVl17hGlLD1i8shvVIS1eqHvCwHF9JdPomWStDVN7XlYx0fcqTct\nK0kgxFhxlm8MPHh57kyuAZuTXPJIdUO5ObVgjAnhQnRt2MZEEYSnHqV8mGAy\nt/YwpZ372FMF9tJwYSQnAEHPBi175aoNY6UX7btth14ztnCCDyNEzk6IyiNm\nqTG6tEd7S/j5ZpCB5ZpE4HCam8giiZ7RiwI/d6F8i+ZCCRDqMAr/Zg//AEJb\nEOYvWvzfu/FX9rGB0XDshcmw/Vh8FcZzx1UA57IVeNN18O4bWUFMJkOEfmeQ\nizv+IfdqLfCXfrIJNWtKwOH1dGMZtJ/vt93f3tG8QxT/kOV56lmgIkfSGXh/\nsnL3m9bd/xXmbERyfSXv8aBaCsWszwreNUru40JWaIZKm2RX+jH9oxtZHPb2\n82vfShanSJyQq5GQd+OFjxrMx8bqA8c6A8M8+1U3tpuZ/3YsYaEwQP3ie7rX\nL7HZNxWC+6EvYMutE4TrbhTDFZNWJYWMC2rVDiYkLmJhW1PtI1o/ue2YrQ+0\nSk00\r\n=uZdj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxQz4ZOdtd0bXjEzneSPEdZQbfM9f8KIf8t/+h/EqeBgIhANwbyzT1JxcMZQBePpnIH0jWA28+rl9jnl57WVRh9M/C"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.20-test.1572540162146_1572540170115_0.8504871518406842"},"_hasShrinkwrap":false},"4.9.19":{"name":"ts-toolbelt","version":"4.9.19","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"54334f36e2f3ca6a8d866dbbe54ba84dd435c244","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.19","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wesqlC6HBnDsVssue8Xj2eNeAzFVCJK60sPfzK6xbGyslwjZ+og9QhcMiOlhB3qi6MOSDzq5ITyYALKCdSkPmw==","shasum":"a2649afde603ce189d6e8997616aaff81e7382c8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.19.tgz","fileCount":220,"unpackedSize":245425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduw91CRA9TVsSAnZWagAAEGwP/3Cp+YNKO3amhtJzPw2p\nexyE1udhnQv0JHNjp/NYTju70JgDM6T+bkjfsZKQdwmbcspJCyLNMjtvTGYH\nIvFw5OOPc95mFnVkpR9cGn1u9aqYvKNOFco/64MDhVAXyGUVBvqFYtg55IIU\nuTfMlhLOx+FsWl1Ufl3AoNp9Mp9GwqaGLwC0feiwTiQOWrkSih6Zi3fsVpU4\noRbONoRo/3Yb6kZnamwIA7GPuQdr89gv6eHT6ClqxEU3piWSokT17EJKckST\nKUns881ECJPJ3xA68PfCgvWu46Gr4mQs++RgUosQUQqskPqbdYu8L0PyUzCG\nrSFXMGOPI8FtOB1rX1R5MxkJmVW/sMz3KSvVvbLpobFLt81ptTMkBX6UEBWk\nEhAgnd2SG2RlOInIxhAnacBMwG30INnfWZyam2bJsQBKDubhvIgQ54p43Z/C\np7PFnv1G4sumDuLc5CfSnSZA2u3U5TPyX56UVyxALSfcuM2GCGCLJ7IBaCkq\nEfT7U0vXfGQAN50SKIy+/9pTeViap8UTuepAv3tc+rbxX+sKiAQTlA1hAWaX\npREhKq7YUzzUc8N21IuvBtpbFNrAh54TkU11wDBIjzYEi2wX85yk20bfGGnE\nVdRlH1Z+lIO00DXHWmeZS8yUoiOlFN8pQMj3yqpTiZBzL4gFFr1JflY2DZqc\nVpt4\r\n=oj8V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCsDeT6e2DfU2RtBhdyJcNdX6Wc2LveAMKdYdcTjtAZAiArhF4+Q3oKMsrPSFMUcBRjDCv20FUakYmKj7/jK16Itw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.19_1572540276565_0.44125366674070987"},"_hasShrinkwrap":false},"4.9.20":{"name":"ts-toolbelt","version":"4.9.20","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"aac770fbe820805d710ecdb80342f9ef6c3561fc","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.20","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-hOMzuaMioBqOqsAqRzu3bIsO7MNxRx+ejstlcEI47jdJhHPoexA0BIUpAh75njuGognfwSVSibw8dHDy9g4iEQ==","shasum":"1ec6a699d69552c7d1631d386a9d0f7630a305fa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.20.tgz","fileCount":220,"unpackedSize":245644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduw/1CRA9TVsSAnZWagAA1MwQAILj7c4fym9AWmNH0qB4\ni+7q1X7sg0iCKZ+w0d6R5vjfRWjvq3Q2uJBvt554SzaIyn4oPGINIS7qwIKe\n0c2KMvDWWVy56Er9jmqbtyphWbemur8OAGhI8/VQiTYax8kCQhCLz8NmHf7A\nDsj7DJiyMEVMPrhC6EXbvH5u4xbS/dJzbntRVWpbC1RL4KW7R/Neut54BwpA\nuPuDLSyO1jjvV9pSsQMya7ODhVQTbQK6Fd2Ecb/3nWqiwPCsiZPRBAkPfZ66\nFsN6NbIN9uEOtDKREzxK1VrtAEEY8syfqx8rF7Sp6GLj97iWS9+7SP1XjPNp\nT/MZBIbSeG5r/2oQFC0PB5/GEuZNmRG1aAMIaxqiaWuL9YmFfF0k21g0kOEg\nh9kYQLHDqX0KYnKy1rga/6Ei+T5vpak4ppC+0OrV2cMF8fT8uCsnqJXKi/FY\nwOn6HABz5tJqUpWHAMg0mWeAanbEEvx1l/HzXbmblw7DVyLjNl7lg6g0OEoK\nPSwYf5krl6D9llwetIcHOYeAER/3nzesObLaoyjgyUkzGAwTpCAEWuTdWuL8\nX5ArVgeFUHC24gt6KfWjlqTNVgyyj7ceyhx5pSQdznfAh3Tqk33+LjHNxNJy\n71giqsGjiADFjCkYQ+2OQXtQcHqOrVeyv/D4otwbYrA5kKXRlSpm0BDwiI2Q\n9exP\r\n=xv4k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDotn/wVUiPRU5DhHY7QMh9SHZHAjrbZwGRTtM2NuHgeQIhAILrkpFm9sFv3TSZwwir5+81YJX7AANK7fezx5AlEbXj"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.20_1572540404861_0.1252460220489886"},"_hasShrinkwrap":false},"4.9.21-test.1572546384704":{"name":"ts-toolbelt","version":"4.9.21-test.1572546384704","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"1e7e3baf43f81fcf2da0446309e950544bfcc5d0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code of Conduct-Contributor Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nIt is incremental and it will be completed on demand, you can ask for this below.\n\n#### [Questions ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nAre you missing something? Participate to the open-wiki by posting your questions [right here](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.21-test.1572546384704","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-htKnaNjP4JyPdtUsJ7tb/36ZXPruHilI/9nWHk8NloOfaJo6MZ+ww7xQqt9D7jOe/poVe4J5NwItuapWUgTNZA==","shasum":"304589b4fa5958566a3f758161adf959c4f8527b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.21-test.1572546384704.tgz","fileCount":219,"unpackedSize":245784,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduydZCRA9TVsSAnZWagAAC6EP/0REYMVVRt5uHpKTCK1m\n0GFIBKQ+faVbN5G1gfMIYv38TB8QE6fNWbJrmAnQLgGqtMwcXxZDD00mmoDL\nAleVEEt4nhWaBZrK+pm+UeqmL05Jxyohejr3sfnq4t7f7R3FftqgASQQHyP5\nv1b9z6/yT5XqECdbtPcWmVROzQ8gsSn4aZMenZh3tuUdykM0d8JhhtyzQeW0\nZbguX8vCH/qoRi5LorWst2+M2StqKdRgalFdnS821kKh+qojPqMh0AxHCNdu\nj9R88ElRjn0C/d3Yz4SgYiTatR3j2s46muA7XevwfqCY8CDakSxNN2O4uoJS\np76sJ5brPWOpJLD80GbFOhD0ZLf/37pfiYiONjqiURC1gusBMKKcssQZs8N+\nNOBOhN9N6KjXjws74CzK1Kf3YhxQll5qLCHA5sDRD/MKMJ8o392bQbyKsMSp\n1HRkpgRKwWAmi3P2AN0OPGY8ShSZ5jN1BP8wwV1+0rnhSsTi0RZfZWtHTGZZ\nvX6OLFx2XcFSdiMwWnsAB3qk+Iw3S4caYMmKmrrgl5Jk4IVcl8beU3aldyfK\nB+2mYk9VelUveNBbd4xwdNbI6+6tkXREj3vJPGFB2vMPlXpOc/7y9gAeNNdm\ncNSu/F9huPmQ+Wx6BK7jdBoEzUjhJTttE5MAbx2ZGRK9yKLrYzkegZ8AIxHc\nTC/1\r\n=9Izs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyd7AMCZKy/v4bF5O85g8J0AnGHJnpCdZqaSRiiVFHxQIhANHRKz2mavoefZ+aSeKyg/sUNEMkM1M1obVG3/Bqe9aY"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.21-test.1572546384704_1572546393281_0.19968407376390918"},"_hasShrinkwrap":false},"4.9.22-test.1572551476697":{"name":"ts-toolbelt","version":"4.9.22-test.1572551476697","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"870a98e7ed533cd5c9b600d42dccc11d451ee667","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🗞️ Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you'll find some extra resources for your learning & understanding.\n\nAre you missing something? Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [🗞️ Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=is%3Aissue+is%3Aopen+label%3Aannouncement+sort%3Acreated-desc)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.6.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.22-test.1572551476697","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-hRFmlrsMf/UAUS4CWBe52+J0bTbofit6HdPs7gNgyOUbXQv4qi15t1LlGqgkubB9TVwgbl20Ia5siRunXmq5BA==","shasum":"b1234db7b70379d589825a56466fa6ace02eafe8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.22-test.1572551476697.tgz","fileCount":219,"unpackedSize":246069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduzs/CRA9TVsSAnZWagAA4k8P/3O5mTCdWPQ2SEhmrJtr\ncOVO9qsf5hEC5qGcq+DQ54TEgdXKYnmQNU63jPc70ehcGEgWVIX1j1axBUSg\nPc0mhSKO6fZbnCRyJQQP1nnqNA2dGRUJpJxqg9bc+m+gKimqQWc3zcwzDkmt\nTLrqGX/Vd8U8PxGWiGKkD5jm8DrC1BM3P9Mdc2iPf77a5aMu9xTgI/1er0Pn\nrPAbm7JEG3UyvgtUWwm4hQb9+Y4ByG0m/2s9jcoMy8YBn6r2TT6A5fTE7qon\nZTAW596jAydURWuG+1NOZh0gUtPfu/N2+VPe8ULVVieFSS2MT//2+RG0zqRc\non/sAovregTf8H1bzLLg0qsChLcGHbYgRPWcwa1jGi5pT/C7S2oguakylajc\nBoqcVowo1x61lUb4j6jhZPIE1c1ply+N0gsZz26Xg6e1jltURDqCGxFJZCHg\nxABpQVhcFtHUY45c9DZmYXkG8opTxFLmIlJczXsHn0l7EJkTThTmYkrmnnbm\ntGrdosWl3odBc01JywsbSvcSp4Z8/bfwN/yWSnotoChL3ArA1pyFsCo6C0Za\n22gMw440Za3Bd8RBdx3ne1IzGbubHmeJB8h11cCzA/dmXPPm5QyChBphbT8p\nb0Sy9cefLjX2YoseM1QpuZQ9le10JyuJ4451/voyU2OR8f/KNa2QUxZpcnvW\nRi1b\r\n=iqQQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtgEHa8evEgXIjZwEiVWqSPpj/jFxQzg50byrQVmMVUgIgFakZclX+9njx7qMG2ps7XKYEO6MdR96M0nXfIc/bOGI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.22-test.1572551476697_1572551485960_0.2244030427641186"},"_hasShrinkwrap":false},"4.9.23-test.1572553482262":{"name":"ts-toolbelt","version":"4.9.23-test.1572553482262","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"6009fb4a8fe639d8afd8a04e821f8922a73a78ac","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [🗞️ Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [🗞️ Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=is%3Aissue+is%3Aopen+label%3Aannouncement+sort%3Acreated-desc)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.23-test.1572553482262","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-oWbFJDYgKPTYsaRG5UHPec38fc7OPK3I+kUclxCeKzAJSPD+ZFnslehFgKHiL026ATn1NJcPAgC/8VVn16KcEw==","shasum":"f836f8c4bd1b132c90f56fc5bb67cf3193edd825","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.23-test.1572553482262.tgz","fileCount":219,"unpackedSize":246345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu0MTCRA9TVsSAnZWagAAc9UP/RvBBhJXo62by0iSPKWf\ne1ByYJgYFtXYWBuf2c0E1y+OrjdjJMnOTbQWITdQnGbgfge9ERe4UmzN73ta\nWKSGiXzizHnrh4chZ0qVzmmrJp15cD3w+bZsQXCHqoL/q44yX59uWS9LyMw6\nWD1wPDbxf7ZG+tZdyGI3axduFFa9fP3yFQyFIYvawCDi8ymzOQmPHDFgIss+\nJT6vl3gHsEF4c+oNpZBpp8IrWjgaIvejXH7LYuTqM3SnIzkYDKMeheo6CxM2\nZ+alGpaJzAkIE1abeQX6gGRVXTIcIQsfWpaS1sH19AW+1HKBJxSsl58CsNYj\nEpJD90x/AK0cP91BU7Iw4Zdkug8JiZ9iGJ0qwk2bX3SW8h6yjRmEH4c5Wd4k\nIIUsb19O1FA3c8t6ChBFa3ZRrpj6q1QjuOQKjyzCZQtTEC7yOV4CLqdwzcrM\nR4F2REmBYgdhgXOBAF6ASHq6er+ksQL6Y5kMwwL+oVZ+mIgmBVVQBba9EZvP\nO7pplWGYwxWkMg5w6WiXGXHq0HcyviysxKzkjkcta9bR40lOV7raDqyLQgCo\nsQFQ/JrVKTIWtKbExVJ3G7O1JEZwsbnSmLsKdixG5fmci1kFHJuMoNbuNrzC\n397RcZcDhya6Bb01PyU4NtBWP46nPWRumo9TmWrd4KT/WrwMQ8y4HsK8RKC4\nJhyh\r\n=cROU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeoCeGfMn+CxWjRntdb6sH1MysEdJhbySNaSdSoLTadgIgDSpSgA2xvcVXy5OQkxlBIxC2MmZpGc1kxVutb8UbLUQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.23-test.1572553482262_1572553491446_0.3152316905912951"},"_hasShrinkwrap":false},"4.9.23":{"name":"ts-toolbelt","version":"4.9.23","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"6009fb4a8fe639d8afd8a04e821f8922a73a78ac","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.23","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-aFVbPSd++bmiLRigZMKTDqC05WD8ilhVuLtDJkjn6xKf7G/G4eeuP5+20ZR8zFKSRXU6OzgmF3AUIwb+CzBMRg==","shasum":"aee2038689486bc15ecaf5b232f16bf6717af7ba","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.23.tgz","fileCount":220,"unpackedSize":246326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu0QaCRA9TVsSAnZWagAAlW0QAIiPC/bGKMrRTZuHyQ0G\n7hO+JKMHIoa4O0MaBLNzrphkBma0vRXB77d7XVJqBG1Mf9mQUkP3doSGpI7E\nsex+vh1aa2H70emxf0kXb/PbBGs8V8fiJN4kTEua7Fezb8gfKE7XdNoMuEQA\npQIWwi2gZfbdW3t7yWmhZEG5OyZesXct7MGJsHGT+18LSi2byMzJZoCpDwLY\n9Ywwrqsy4Mdjwo601taIyz1Km+Aix3H/elfTosPNvpFb42e+ZE53U2Sx7HZR\n8hGVV81Lo5mx3O4U3kbrjtUj0k63W8xrQuKXWhyCJrjkZuVEbiAPWvfL/Chf\n/il1SXbdCfr+cGZ0ujrfz0/JlcOScYbQwmNG+goZCT0uO+AlG6Bqsd4wuntR\nC7M9ASsKpWVPnCaTJd/dpHICU5+rssQ/nd+xU7fZf6VJ1zjZj7cj5HSSOPJj\nZb1komAq5Jejvq2Ihl89KKBtjEO5eJFMvsEpxF/BqM61mggvxezyMkWnz/VY\nkWlZb/rHNpyUaDvdl41iRaI6QmrW0icQMwI4SG8UP4ji9QdRnVFZujvoM9tl\n4c2ZeBp2TTsQRuNuzN7YXlF3O9pprACMGDBoKfud4ZK3w8lnvjIK/nhvR1uo\nbKyQv6DZ/tK4qk2O8HSiivRDpSny9m0wc70+Z0gn5QwUSaK2YjcQXuTOLdT0\nOOv2\r\n=H9+u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCz9dkmbn1ysipZiauZJmrycViqaX/TmPEJvpksuPoJywIhANwYrt/Ncgjq5IOls8tbhYXtMg6Zh9jpFCY41umZN7Kj"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.23_1572553753886_0.574722357832407"},"_hasShrinkwrap":false},"4.9.24-test.1572555106016":{"name":"ts-toolbelt","version":"4.9.24-test.1572555106016","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"fd45818013ecdabf945ce604329499e29eeb6dcb","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#️-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=is%3Aissue+is%3Aopen+label%3Aannouncement+sort%3Acreated-desc)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.24-test.1572555106016","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-kecFifLV/ZV1/J0h8/o6LWFVB8u/maV1Sw71rlzP0VAgOoP7J6HITLcxMqYMNOXAscUjkb9I/BGvZ9yvmbQV1Q==","shasum":"150434236e9be9f3b65c2390350d89dd7d1cbb61","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.24-test.1572555106016.tgz","fileCount":219,"unpackedSize":246560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu0lrCRA9TVsSAnZWagAAx5QP/15ByPeGgpMjIYP/Z0iw\n8IH1Y4LcLgnVXQKW0wpj+oQq/olzRZAVGYGO/2JCBhuTRH5xTyYWWK7OJDG+\nTrtKY6S/ttJmNTLlAocytriOoMhfcw98PF8QY/FwlzZYxYDzRrKoNnuxOh67\narqUpfQ6H8NER4YUDU3yO8suJQ/HqIHHGBbsn3qS9Uw+/rNjENXBqbWFjgau\na35xFkwGs0HXufLdKqhWTFvTQg2sWPn+v9qj2awZj47tM6TQSp4ArasotiEW\n2bjFB/3LyYVQbOCvX3+mq5Sti+9YE0r3TLC9U8uoT26Q4EFsRk6J2d16qZgt\ns0NW1T2nFVXuFybCXiANXPtNg8vEltUZR+lhHs4SxNyc8+raySeLjqOAmeWZ\nvjedCdRLPmm/Zrn9gSlovEiqCsdmgvtgRID37skRCKzAuFdwg6VSmG/1r9+n\npdz8Du5TSI4ObIM2K4lLjX5Py2XuhJapXkJtr776AVUa5d7+kaDS2Y+cDID9\nrOq0sQJ8jyPQohKjhl34XX1SoBZCiHWr+I4n4UEGKqo0nut1bQV7V2hDxpJz\nA5Wj8Vd7J0N1OYy1qXxQkROnD2ryTodcqCNaMUIXazgq0X6YqToe8pPFbw/E\neCgZC9OQrGOprvr0ECboL0iFMsSXauoc+ljvDxDa1L3EkXgXnH6Wv03SO2BQ\n3G4z\r\n=UZvR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFS9d/gWN8fEKGVeFA3sAEItvBycbDKiI4xGXN/DwbeoAiBtVYia1FLhdcn2u44iUCJXSmZGhVjraTd1DoAA7OfsEg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.24-test.1572555106016_1572555114840_0.06295397380430923"},"_hasShrinkwrap":false},"4.9.25-test.1572555190742":{"name":"ts-toolbelt","version":"4.9.25-test.1572555190742","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e30bfd1c16aecd23b77bc5573b9760f58c4d51c4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 TypeScript SuperPowers</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#️-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. On a higher level, it abstracts the complexity & knowledge you would need to properly type your software - **you can stay focused**.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.25-test.1572555190742","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-sjLEu1HiWishZhHVGKx7W2RkkM9UAGnd+iHVJrUh8RHZyjxVpduyetolciSJyhjk8H50QMFmLSMc9skg7mTLgA==","shasum":"a7d7bf2f4b795c247fbf5c389281dbb2225559c0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.25-test.1572555190742.tgz","fileCount":219,"unpackedSize":246778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu0m/CRA9TVsSAnZWagAA+NEP/2jRnQIcLivfgFX0hORw\nS5w5CsWwimS6BJxuNEi2lr53xfyo8SxnqjPiIvKAc6xqA6iBLWdJ+4nRVP4Q\nfr3GJmNLNJXY6zNwsUjx1Xsc9Hz9An2V133CsHcQf3aWUAvtezELzxEx2RSs\nNjlWz/fsD28sS7RNcFIrMJ0b6wSY+Fhq3V8dTr6rTJVwWdSJel9hKxb0HKsc\nYj/NzhM6ZJ7BBKPXcQ8JC4bfsdWmwkog3A7NKt5r/ciwpYNmLeEEoMZiahKz\nOmCMLlycBO7BbH8GHrk7O3/lGo5majTzauCM6rIA8+sMa1pWdaGyDcoj+nWT\ntrtLFizLEJFsP95OGF6gWChr833p3zXbx26LA0IjWltiJA9JafpeInRejdId\nvitlE1HtEwF5eR7zecjSj8DAnHhA6QD8QBmVHmPdvx+WOh0OMlZU0yC9eK/7\nT5VJzENNnEq7b79iRLT6ss7qhHl2McjXkmeQhnurBg4Dl1RIIAPjN9j3h0s8\noyxsTEV8T5zxXfy/VzmCKXqCD4ePOwqGDU2YndHiPCEIRdM4CsgfqbzHke03\nzUoXz080Ea3C46a+8fdiT52tC3dIkNr23tcAr55DiqDAuNPwt4kLoDM5/rpu\n/n7Go8D1M0HYoqnHaWrFSfp0mLTVQwVcCITPaGxGLyB37zcQFD2GJRJ44e+l\nmsjG\r\n=ocI8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHqqMQvor9C9pSLRYqkRC/LkXw2dKp7MceST3IhwVP0JAiEA/rzZxbyGTEuaQzFKQNDiaUoamVdz8O3K7HUCqejJLt4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.25-test.1572555190742_1572555199202_0.7139458590368399"},"_hasShrinkwrap":false},"4.9.24":{"name":"ts-toolbelt","version":"4.9.24","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"fd45818013ecdabf945ce604329499e29eeb6dcb","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.24","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-vN8A15kMmV6Oq5n1PQnbWfMCeQvpA3V9g5FwXa0lBv+R/cYxl9npftogyxrsvrtnrG2GTQqwW5PZjMCzrgsltg==","shasum":"5074576eef3e3a18bd1fe25b23c64a03e83aeaef","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.24.tgz","fileCount":220,"unpackedSize":246541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu0pdCRA9TVsSAnZWagAAmhgP/Rel2gteedkpysvIp8fw\nqhPxXRGeJ2BK8Oj6Uok6MXT3Pi6UW/Azm6yVlTEhxAMhe4SPzEsu4aoZQpP3\nt0S6cHiuUDzeB9hh504JO2GFBnxO50vFKEJ59IHnrM9IDytT3u3BmJ1RmuOU\n/HR2/uHpJONl6rtZtLIB/WinYN62UTnem1YX14GZTC6lQ3su2hHn/YKYwnof\nly5adQKemOpStI6VGIArsx9TRgxGbD7qx342qfRCnLfJRsTORoTtJUrQGs19\nZ5Aj51wezdPrPn1Y4pLC9EveqGCdgvWRYXmo9qIBYKaJFpYsgicxsqRaoKjI\naBX7EKyZxAWw+Xx/i0rq1iRDnqz+fsiBMhFpRykYxI9XkHHV6oWbqiWLRtU0\nSro1cHCiqqqY72fCOjTTGMKuC8MAmBQ/2LbagMHxik7B3bIcU5fDwD+QCJFj\npmV+5GlsvgIJ5974trY66S4Zc06W/pviWqULz8DpgrU2u5B5Qe/hw2Ak2s8i\nZpSF410RbniF8il6QyGtBERNCZOiP7gXYh7MqPC8EmzDo6rSlKQ3JyGNb7ZH\nCZYDR5vImxNuHw9GIMieyX3VgBgdqe7nqmu9KDVjnXwznttx2c9PNwlKsJTK\n+kLyT7uRC4H4pK+U+2nbIZPWXSdl6/sGa3Rgc07NxY9Rw6KR3ofNjOhDgoW0\n5Fwv\r\n=FTXA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHt9o140l7unYz+NKlxklCAmD8eAfJtl7LMRaqEb6D4AIgLJ8jrtfL6BWPZ/yrg39jKS6eIcUSm4cEgTXdlunD/iw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.24_1572555357116_0.8330993310758208"},"_hasShrinkwrap":false},"4.9.25":{"name":"ts-toolbelt","version":"4.9.25","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e30bfd1c16aecd23b77bc5573b9760f58c4d51c4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.25","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uUfXMJDx9QZpcvr9ROrg04HKAcX008og7xBo/jfTZGcUIfZaKelZzKdA1NqFk9k0TCnuwmjTZ6I0y7l+67n88g==","shasum":"6d0d2eedd1625b0cc455da0fe60fa1e1cf7a7313","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.25.tgz","fileCount":220,"unpackedSize":246759,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu0qrCRA9TVsSAnZWagAAyVsP/Rm99K262Kf3x2N75gK9\nLQ7FADZb9X6el6VlagI3XbGhS4l8aCy1TcHQxQiIjjlmF8Xq6ELfin1u/PD2\nW3D/W3KUf38eM/3/hanmX3s5Q/XpF0gKSsoLdUf9XFX8eanwFJEb3bYNdpEs\nkSO+v60Cg/aThsw4B11taRLtkPaHas/A3cMo1LhkKBvwYHVufRfXF6Yl/p61\nX/Klau1d5YnfJpJipj+yDIpPlMxMTESnzSO4HWPZ3U9MD1COobFKlUlG5gbG\nMiQIjJKRr7Chdre3hVwsmDGunYvqZp2nGwSjCFoCZlnNWTzavNSdreyvV8l6\nJVA63BNaVJ5vRZ4XXg2Wk2VUECLlKe8BlebK/5OzbPAUoji/124D5eTUvz9O\n2CMwxoYJmEsWe1rPRxsZZjW9PFMCIrSwKoK1zWHLhlpBrbNx89/AZlQF+gGk\nGnkeSBhvj0mGSlmaP1oREXG9wUu4KgS0iFHAW7cGMU0qjjjEmdJjsPCLCU6y\nYAsmpFg0eylJhPAo9SKE25+av5wDO4eraLDGyoU+72+qt5mg6lnvpRS+Q5x7\njVP9d2Ek4/XMQ6mHzBUbkS/pgJSbKVBAXP1jGuMJ+J6/N73NKOlrc6A8Z65x\nJuQLdW43ndPtu5vIjWlhp+PgD61Gasd8Rr0/zkRwvBlE40Q4R9pZ5VeNcEZs\nW4wG\r\n=22BH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWzjBU1pax8Omz4K4baxVdvAkI1vvlaiARrzkON6kw5AIhAKk5dxCzO/cUbl/yPFqY9R8NU0OuXASo5cC1JERFO7ZQ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.25_1572555434744_0.3135901190382535"},"_hasShrinkwrap":false},"4.9.26-test.1572556041485":{"name":"ts-toolbelt","version":"4.9.26-test.1572556041485","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4749ad5a9b8cacd5e81909984cb930f87f18576f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 Get the most out of TypeScript</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#️-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.26-test.1572556041485","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qLmooTQ9qVxBZ/+kX/+SzaSy5eS4X+hK0+9UlucwlFRV1Pu8PTCcDIVfP80uKAe9oNoQhhD8ZUenUqqHgQJYsA==","shasum":"3c421894033e1dead610895a3a8688a516626d38","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.26-test.1572556041485.tgz","fileCount":219,"unpackedSize":246992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu00SCRA9TVsSAnZWagAA1C8P+wbhA8YzYn2o/BavrSyh\n9fAhAs2+Ww4o9y7bNC965BBZ9Y4NcP0BeMxXLrFR2DP3AMUgBfJq5Ednxx79\nYdUULchqXfBslQHZZjzfMJKYHcyPqtHcBxhFSbQRAJCX99JMq2ObBYDCxiZy\n9ANnMSIJylQjMRK18bLVnWfd7Jw/kivmF++PNes/ABK/HNwANeT6mEhrgimJ\nEUmxthClnQDMeKLv3uCJCznNTXB60vcniup3psLVhr3lTKokac7apng5/x5c\nlvDX3rao69feHydVsXg42x3Y6MM2vWH4Xv+8H21IPz9oD43m5U1e6CEiiy8L\nXJBquNPNFvt2vfcO3TjilqYTr22vjxEZ99Ul7U5W6R9VW4ONpY33+QbGOzXW\nSVYXBLsbMPFVTxo7YXyAfE7BuM/oqtFta55D0f/BHDSQ7csQZrKW5wFUOALO\nHnmBg+yOqeKJQcibOWDwdkMRVen8RQC2Vzwt55TOzyHK6vZiHqp1jwP7v1dz\nkdgM5mqJ6lNYszRxSEnpoHqEzDBiLFwGNZgJwwQi89vTEb9Ovd2nuSl0Wa9X\nrcYGr8QRS2U5tonYRPoSAWpVHvqsCkoQwC6BF1qto1LiiUn+6ipUpMHurJFr\ncJ0b7eksI2T1arwsmxhybImQ/6Wyfmy+rYR6ZSXp+dOttJWB+CAXLf0YFjQQ\nT33N\r\n=t+TU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1B+hycHtSgkcx+fWHYsB1D4jE2uQsQu5l/OWS4GJJSAIgMEAWqY1DqDorBdIP5Lm5IpN/okAAemKLXeTgWSMAyRk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.26-test.1572556041485_1572556050030_0.05222021290727841"},"_hasShrinkwrap":false},"4.9.27-test.1572556252966":{"name":"ts-toolbelt","version":"4.9.27-test.1572556252966","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"51f1c08609853d7fc70e898089b42773aa17cdee","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 Get the most out of TypeScript</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.27-test.1572556252966","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-W+cyB6ETfWPRSay7oVAzw+bI8gOZpjWAuM6Geqphdg+uiZ7xPz1/5nJhBRFw/I1YpgPjiHQAgfzAHnblTs1UXg==","shasum":"eee20997984371c4b5e06b51b07a137a44a59ce8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.27-test.1572556252966.tgz","fileCount":219,"unpackedSize":247207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu03lCRA9TVsSAnZWagAA75QP/2Q9TqoUIpK49Spl/QUk\nGMKKHmDjk/YuHGvb+9L8K7oyhztreaGxtbJtVZanqkH4zHZgVL0+PVPNP37l\nOP2SlL7qLydXGhyhb/brG7FbeI5xSsH6ts/K4Qbm7pKU4y4jVN2sTua8TEnR\nx6OzqKa5I7NQsGZ24QnaT6ar8Pu7+9mqUhaYpuY0dkQVrGOlWHE0f0u/NQKl\n3yX52IzHF28XDmzIHrwIYw1w1i7sDimjKqtzALpy8Xuyl3kqkDlJY2i+JxzT\nqTp5DQ1qhaHVSOuAzM0QydikSvS1xkVtAdpOBcQi9OpCA9DXjAlzm/lHWiCV\nkFC+/9pi1fMIWrUQGW/hZi1XOlmo2xEU5hZ3S7uUAQ3CeB1QuyE0OGPxgTDt\nD6j4tuC902p12+NezwpjAqkJ+KGocYzh0q876+yzZ6+jLWyCNwy6ih49Z08w\nAh4rhMYTcUd4Rhm7g56Z5ipkZkKHCd8sAE1lkyKqOe+pM9GjYrBcsB2HJ++a\nunKfPQ+Lth51qWiJZ0eSHFCteNEz4TJaEHK++iqN4nd+/o+TPJwc++9icCv9\nBTctvPjS8j1VgMgvUH6NXBxWFXvarqjXMXvPqt7Sd1YCwmaOxjVJCIFxo9Wm\nbDDENqKbA+H+3Fr5s4VGcN+vBGh6q4o+xb+6DYTeb1LxAWye02WK98jYJeZb\nZ5c3\r\n=xbAh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBStGr9avgoECjmXAv0vtJvN/QD2sBrI4IGJC5q1qvaSAiAmpnFxBFIQeQpo4JO4icD2dbSppievTR2JewNhwHiJdg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.27-test.1572556252966_1572556261168_0.15555128976433275"},"_hasShrinkwrap":false},"4.9.26":{"name":"ts-toolbelt","version":"4.9.26","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"4749ad5a9b8cacd5e81909984cb930f87f18576f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.26","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-eRh9A/nbpTRRKAzOpVrssSk44/g1zg7vxV4R0ETTSnAiaoGK2qqnF7HYVO+gG4D5+8Y7sBPbLU6C6MVhC7UZTg==","shasum":"03ef679deff3d364606b59be689910e4e872f76b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.26.tgz","fileCount":220,"unpackedSize":246973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu04ACRA9TVsSAnZWagAAgaYP/iYqYZ+hTrJaR0KTeKO0\ncDG2elYRXZ3FYcRUd2ElzRS2ob9Q9fUVHp3Ez408dtp9kSDNFRsxP8Lqvae8\nra0jrRYiGzuNejnIOGKg2nky/TvEypMduD2pUBEQz13Taqma0tkKZ8H4Qg+h\nKcAliZbXw5RHJucpJmF23uaH9gGvmXKmgLsT9eFAYeNCRq3MEhnBrZHKYniP\nQW9PFFr5+4xv9b4TPUIJCKak23ZB602t+41Fe0pukBjAqleBgOdY/wQhWn88\ntbp6Na0qK8K9mO3cqGxvBaJ0sG1SPQiXKz4az4vijUY53eSRlzMqnYDylHEA\nYWGE6uOsPlvQMgMyDknX3EjykzkkvX1nTkQ1phmGurzT+I96b2jxDXp2fuW0\nWwCcPWTV6BCx5O2TFbL9qJfrxaarPZhr7exBOpPtCZa8LLukPvAWgYaaQB+L\nuBDdL2XZiRkRxNTk9FSW+RbXs/F2Ay/5lQpvvNOS7DrInx/2Pi8sUyuWZUkh\nJKQMn4Purh+eSqyluruegmAxu3uEue6WUnawBUi/w+EZ2VXyo3jgcBdnfK4k\nur3WsygpNhn1iyT5429SxI49W4I9dScVWLVweYuRYBuJZtZC0HXbIjivPXyK\n8WFVasbJu43bGRYbz6EW+kekcYqJh1ONDbGpoZRzSmpzOVTvlP64Qb6Vaxyb\npMHc\r\n=sjlX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1q+jxCxHVGligU9K4hTjDIiT4ZJDf+tNaXlCZT9AnxgIhAIPLC3C1Ooch7IxFM43jataE5+9X5x+J9SveLNLlabgz"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.26_1572556287782_0.35384408846969717"},"_hasShrinkwrap":false},"4.9.27":{"name":"ts-toolbelt","version":"4.9.27","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"51f1c08609853d7fc70e898089b42773aa17cdee","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.27","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-mcGnMpY6d+aKx6AQ+w6ezep/gLRhr9iOy25KWMWxTT4ionf5I3sW9qndsM0CVY5vskeDqS4ZBp4E/5i/k/0ENw==","shasum":"1028dfec92ba29aa467928862de83f12fe9adc61","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.27.tgz","fileCount":220,"unpackedSize":247188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdu07dCRA9TVsSAnZWagAAQHkP/0Mk+X77aCpae/rqdahz\nsQPFsYNkEMFWB2GF2pyUvtvKx7upa//eLWTv6Rk+CdpzcOERTE83KbpOQCqm\n8DJDGmo5+LDN6N+ZTRyGJTqoMtwRC2tAO9EPOcMAbCyFW/WwfSqfJ77Ylv/D\nMZRirrSzO8GBKWCD0xW2slIC611VloZyovzLW3oD65+E0s3HgnLYrTpUZ+Ps\n8si89W30x6n5flbirH8ukbeXNTBilOtCI9Lr+weVLJxpWl4yCZqWtkebHFCz\nOW6L7CxvTv8lbKXO5sNTtEl5fe4MFwL2p5yUdhnhuIPtZbx4xyKUQlVbVvTL\nRHPlRmZWE8lfapH9MO25yE5YIUFXobYy512RfSSTA4RVvpweF5B9wYgdQfkX\nIPXBuqYmxGfbBTgR0phnKtPmSl3fcE3vTuHXSnKiKIEBsNDnIzJN+O4yEL8F\nqOu7qCLtVfLoNdylaw+XwcASzZK3zF28bt17IhnjX6VLsto/Cgw1oCuAXW4E\nJCJT8nUJoEpYSFiZrliuMf90gV6GHEWlKxCR5Wq8psgmuWXkIgkir3qTdNov\nPGR/OccTGuzRGHkscqF4BuxaquHZJPQs1ZBaxRPVNkYcL6bQhY8mpr+IU2BL\nl23CkO4+prgbPDBTG5b+2Oquzz4nVgeMRKr29fXvfI8Y02QQV2v08G2PaQYJ\nd5qM\r\n=jhcb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDm4Dw2TFAQAft+17C/5iIqoCRveNBoy2ll3xPaFk4dgIgVbQ+65kuSTkFqOPY7OKFGEVaUj0g8G1x1zxZPkZS0uE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.27_1572556508673_0.4039629239418778"},"_hasShrinkwrap":false},"4.9.28-test.1572604989247":{"name":"ts-toolbelt","version":"4.9.28-test.1572604989247","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"7f5df86addbd08e0055172711d029fbb57ed3855","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 Get the most out of TypeScript</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.28-test.1572604989247","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SDwE/EUmJCimOHVbxZvD+V8gN6018vGxgaZpBJdV4fRfT8E9827V5hW3bQ2xpXFwk84xRw2QkhUK7UiDD/jcEg==","shasum":"62f1e1ea868dcfa003080029fb38ededb8ed73c4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.28-test.1572604989247.tgz","fileCount":219,"unpackedSize":214636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvAxGCRA9TVsSAnZWagAAyVYP/1m97EloYy6+1OAsUNNH\nt9MYCtv/3NlV/+jEVs7j9/Wp8gl3rozysM9ZnruIqrsgwd61NFlP/F0MLgKf\nsTd51Ezm1zrPl4w2wlNCxVcd94Yt5n/Fv9Z/XqSmjBr06c3NK4bUOicn5y2Y\ne8+R9xNMf9QcPkMaNdq/LVk1BTicwUDte/jaFizpGtBafm2wL74ApsIKU5JJ\ncXnNzAsdj3x1wcf6krM83mXUMgd67WhXpN7GkRjCT0KNBPDCd/kOhUmbhLVP\nqv4/4QZT2Xas6MO66ZsSxyXPng+kusC/nR6YJfWYjSBW/FtRQL2WaNMMD9Iw\nFs4iMRMjXWaAlM97/g/81pXbHamhi2pfbK2ZYXm959syrXQz8Zm/6Wd4k9bU\naaZ7mzzifhYjyy5oP/+Sc0PG1nc4WinLhop6hvxNSNXQuh3uPwj9th5zdjwO\nrPLiuCMhRL/NLcJUKyV8u3wKYFGaEIVFAi1S13qGTsoXRKMKrKzeNlonlbQn\nJutlWNZDPNFunUgAGqP4d4ejSLYdlcUkGSBLdQ7GHg/G+9bzkppS0mxRr81q\n/3GHonMIeyKU/AHPuV8rkjawgRhOEQHgz/AN828HeN3LdKnFaJi5InL9apMd\nFS3uu3NhvpPJJnFT1zSKM+F3mQRxex1tv57TOjs8KDif5j+J7X8bg4IMqsT3\nb8Xk\r\n=wm0q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5R1UTuawvM0NZsIBN3jAiVD4fgcsKSMhiNZommhDBKAiAlJl4XFTPi5wRnzgB2AOVPJwocPKwM4mr/Zlj+1uR7ZA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.28-test.1572604989247_1572604998019_0.685112380775726"},"_hasShrinkwrap":false},"4.9.29-test.1572605400406":{"name":"ts-toolbelt","version":"4.9.29-test.1572605400406","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b54198a2dfcf94b8bbdeaa7ee4c25827e68c1a7a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n\n  <h3 align=\"center\">ts-toolbelt</h3>\n\n  <p align=\"center\">\n    <b>🔩 Get the most out of TypeScript</b>\n    <br>\n    <br>\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.29-test.1572605400406","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-rODMbJin6lIt1WkLIkTJjhIjjwFbkzftoIqiRERx4q5d/ZpsFwmazKGCms+9XiawO/WddHM4q1mwVsaBsT0cjA==","shasum":"d10afd11b99419b0aedc962d2b24204a31605038","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.29-test.1572605400406.tgz","fileCount":219,"unpackedSize":249991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvA3hCRA9TVsSAnZWagAA/10P/2Scd86kJvJEhJ6rUK5L\nzV9J/NOrI7N3mt+tpsE9dQ5yc43cIzoC8SxC8ISccIKvXR20zCYmemXPH8WZ\nsNbh0flqixfGPJQR0U769ys8b+Lyz+sn2GhjaKnd7cA2yEX7Odq2Hl+62gII\ntbQREdZ2RQLKx3igb3G+wkFoMJSjqKyq/t4OHBwickzcqkNfQS2gtX9z6Pke\nZlrA8Twcsuwxbmln4YgNSx3+8uVqtvIIqmu4lWPVlB00/N40hduCVn3KvB5u\n/JwPkiFI11FaV8xZhzHR2a+ypgcYWEdMGIZ+zdOQRcWl0spLbE89mrSsLASq\nXtb19HQVJ2/44jsLCi3O28aLWziQvOjoKNvh7GVYv+xVjBHCTOalfs0HZBRC\n9usT4EQ+ZomDgOl38va5dd1o7C2JIdnXn6r/tG0qqIc6gPM9/5xfJO+63mNf\nxyDbpJSrqonncsparXlpNnS++zD2AOSUZkTxPOu904qi9owGQVsaBjKnDmff\nr44QhdoBpq6/gJc5s/w2P9+QtYX1xp5r7gm3kAZfsCweMxgQqBomigMzhG5Z\nBi0vit8BzFg7l3LlyYVcmncHEIdTv96Gyoml6GyjhOMA/xZXbbjNYShZheTK\nynet4iKu94KNox3xXKL5MxFe5r3zVY8PLhub8dGnsrvsPWrBHAL6thla/du5\n3h8Y\r\n=rjdP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFisan6F8KLDy+Re/umhd1BKfASBxNxyw62sibli7qFsAiAasmooCuFaYYyYdVAxlfb7p1oJjdTOx+yiophkKX7z9Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.29-test.1572605400406_1572605408954_0.3862452521785409"},"_hasShrinkwrap":false},"4.9.29":{"name":"ts-toolbelt","version":"4.9.29","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"b54198a2dfcf94b8bbdeaa7ee4c25827e68c1a7a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.29","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-K3UkMlNloLNT5Bib1DTsr5M3aCro0Cbr/XA4nR9uEhGrK8GKaxN3Zh7o3PiwiBEX+Om+ULfo5MOcyikX20uPYg==","shasum":"3a5a7e419247ad6a24796c73ef4b511f7f5d490c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.29.tgz","fileCount":220,"unpackedSize":249972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvA7QCRA9TVsSAnZWagAA7L8P/ijs91/96RFxg2lGT2V4\nO1SJzREu+BuSAUH9xlwzlRyCY2/o7CKcFWpjgUZcplQWUuDkoCPrPJhrXYGz\nkGQsnSmhU5kOWaDNXK7OA4f5eemPijPidHeomw8/jG/6XRgekw0EsfMgAB2v\nzSFB0tpgcmBS43tLCQyIUWd+Sf5warbWb4O+T7oNFzoROsb6TvxNGFBtC/jk\ngnqyUkzK88BAGh9TnM8CW1YkDLtkkla+WZKCMF3BHcULU6CNJl9ioJABbf3x\nzhZoJAsTmupB0c6ADS8mgXDYkry5a3GYOeT0Dl+MH9ssAGSuK8Xl6xJ07QT9\nhOE0yR9xAxNlJ8khVSl9fj14EyrJovuVquq8Hzyv+3qK8lIeEfN11wG7w1Mo\nqvOfNaMFLU2loImobXKFG51q5kU07cERVdd+FwYOC3O1B3kJQY/3KuKzWg82\ncd/SuLLqOemHG2pWWP0OZ4ZTmBnE3V7nTpZPRyjNP4Xl7KxBmUQWggwccAnW\nT+Zqc3JKk3Hdu2o/naRs5qUxPo2BhvxJxJ4fn6vNvBcy9fXi8vXYV+XsnWea\nmJXgYuMhXoZ9q8jlhoeLEOsP4iKuGNek6xmXkWR1CVWyScw0hOn/lOlwXr72\nTbPoPD0yosL33aQoBwDhxF5SSYUxmjLCIiSW7gnk3u4C4OVFIANPvFGWGWQu\ng9ev\r\n=zGSR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/rHy+oWznuwzVQTXNshiABibmSGU2AZ9bjnBbwbAX8wIgXWUtes56n+8RC002RTLlMoxu8hPth8w/BXWIBBNdpAY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.29_1572605647786_0.8058984699490621"},"_hasShrinkwrap":false},"4.9.30-test.1572644773597":{"name":"ts-toolbelt","version":"4.9.30-test.1572644773597","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"377bd6017a75a8850059050757b08d65be3a4b00","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.30-test.1572644773597","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bDq+tQ1ZgsAEkfThmBO30tE3jeY6wWotbAiCTzqbnrC+/qVSugz8V45UEkuL5BKv02euzyMs4QtSY/Xmmp4ISA==","shasum":"23c8ba0e0488ee020633dfcfd847f76c84137951","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.30-test.1572644773597.tgz","fileCount":219,"unpackedSize":250211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvKeuCRA9TVsSAnZWagAAPUYQAJNOqLd6ntjQQJOEGZ47\nEoL6yZl6yb90MFZovQQf+4qFZSHlQjiTgr5nsVTSkPiBwFCY6GGhe/99DZPj\niBiAnXlncyuq+YWmPs37MIX2+ibyByFyDSFkWAr1l09ie/JctVk3xL0Zzubk\nVFFJa7NeqWqnbvbeH2w69MUXd+xO00zJxsFZcaKb/pk+oSiIqOEKLxmeic6F\ni/2jeloWA0pU38bRLGum1yaB53S9Shhg+pkdfmBDzj/NXXAMAyM/6uqyg6SD\n2FCG1r0MkEFTZVyXq+vZ9Vnknr2syWv/P3xghWjaVHPz5+BuiTgR/hGfjW+A\nzwgUEg2SIfZiVdE9er3Wg6aT7GhQDB4H4QZfcA/Zaq39uytUniJVhECI4uMH\n9ON0WtLzYzItWjcsN55/LAjXs0DAlTotm1ZXlh1cv0zz3NDMFjw3OgeCE/R4\n7sRf93SWzCJzRoIZjo62XIMnehWCcbNs9wtnTsLCYFt5BUtaVcuXkA32susA\nEPW9sI6K2KFuuuvSbZHUzdRUzvVnweMkMiwGCeizObXY1aYZjdrsHtJHkiAJ\njWExIwHdjfKyy2k96duzRf87F+XEGHu6Q++/k84Z/uBtQgNtWESvBh646o7u\nBP0DUUgsTpSqM3PBaYCZFP3bdBoqajYYQS8AtBs7znpijTzRnOPmd3huIwIM\n+jtC\r\n=TpKz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCf06LfZv4P2vOkljTpg1/IygfGes7ccP6Dcaguuu2pSQIgZFyHXSmNHViO15FMZb12Qu0tgicBqrRnVzRrF4F1CFg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.30-test.1572644773597_1572644782243_0.8110607508019685"},"_hasShrinkwrap":false},"4.9.30":{"name":"ts-toolbelt","version":"4.9.30","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"377bd6017a75a8850059050757b08d65be3a4b00","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.30","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-RxLOznMz1ZhXZZJqWKO2BjUyWsRb4gUKd1vqlEEbJGtolAIcCNGf5LcoPxpCVccE6XdMjui1zs6MlFIoRf4ITA==","shasum":"302d6ae6b77cb9e56aa4dd51840a5dca18cd5746","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.30.tgz","fileCount":220,"unpackedSize":250192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvKigCRA9TVsSAnZWagAAP00P/ivvvK1F/q7TRoDPKJZc\ntUxSRWOzLeQI9TZ1BWCvGAFEh0T1+QSBX0037aMP89YM9oJSsIShpUivoKsC\ntCYr0hLgKy/5a5qz33LLahh3Cl1Furkpe4rsaul0cDwZHGoJ+ulgboLImI11\nkDuUIB0DAbCbOY3ovpAyms0SDXotv+57w8ESDtCsfCGxWtPInMtj6AMayad9\nmbmhzl0rNLPJOpPBw5W/PnttpnV0CREB2oZNYpO76PipQTIjTA9cuFwS4ioK\noj1dh2b62CoY5+MmNhWDV5zC5b6AWFddhwqrvZKwWe9GBuX+BKWmPLs/uc6N\nFo/YKiWemw50uW/BSpNiJTZ7piNizWfLdg5SpkzZU8rv69H2BPB4UpIqEiKi\n68CHSD4NLXWpna6GROkdh5723hRnAtMrfMePVDMtHZnu8WgDjUGg6XBP8XOX\nj/By6qUev/eB4LdEiCBSyFccyKu4Jw+RvH/AEk3BGmgZBjYwZM+jCekQ+0cM\niR4TcH3KuCUt5ih1/8ObHvD8LMYRh/iR+GWKyQVkugw0N79U24CV10OS7Dmh\nxEVPdto6GpK7VhTKgqzzsF8zYQD8T623dwae20t2Q0ih5rfBl9i2rm1hh8R3\nZ7Joxj+qAsWb5a+5WyitDj2df2YVj4XcAKyHY6iiVXKSYWwWbXoMRwAstKzq\nqn6e\r\n=7OrS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtEVpUaZwGYx/Wi9scGmVTjhbmI00hUJhM6bOG1/GdIwIhAOTAsZ1g687EgQwFpmQk1iY5gNtme1Xpt6kBs0wzUfgA"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.30_1572645023311_0.9473032517002025"},"_hasShrinkwrap":false},"4.9.31-test.1572691023015":{"name":"ts-toolbelt","version":"4.9.31-test.1572691023015","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"36efc51a55f89dd959418101319fdf8a8f81b836","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.31-test.1572691023015","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-n3cX/BgeQp5XHhUHUdFZe5gLkQ5fUGzyrU7H2d9J8tVjD9FlBZnxNZocRaA7CXh7KqWToIqbuoWFdFAK/xW2lA==","shasum":"b2b3d9df2b160f32c65a5fab70518e954a2ecb8d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.31-test.1572691023015.tgz","fileCount":219,"unpackedSize":250406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvVxYCRA9TVsSAnZWagAA9bYP/j/dILvGTXONfhTq5lxu\nhq6HYontDyfdGVM8z0ap85ZuYsQAELpth4Hkxj7OLnFaEtYfrZyr9/UEhwha\nib0TEXbbbGmQG2FakhLwSAwwx8317G2vL9NE1gaKBEZKpXB6OwHzu9jl8RX5\nb0vlXnySxDc4d8mYsN+p1bPkm92rfKGTwK3iZ6D/ZgIxim4viJRKJoTv1+CF\nBHgUDv1N/67gG1pXrJqbBzKbgjOUBO7nqYEEK5kHm9sFVh5QFfmXRMZjLSz+\neilIlafYwWhsvTL1Tx95b+IXPSLP5zg4cS4zdmtp470zFb6UkYP6BJWXwWN4\na85lUFXxuvG5LY2SiLWdMuTC/iTB/QRtJEw1ync6tuoloT9nqopJxbMKHHjs\n0FQokfRyDGXqBq8uO/fJoHe+UG89C8K/AM+RJy3tSWsB+CwnYEQS9L2tYt4O\ngqQ3A7szb7ysUlHDjGmwZ6ku4i7tLE9IaaX9+zMy7EwGp/SfNmsApx44GScV\n13dsY9zQSLZjtMfeF50Dzkcg1tDNXO6vRkCyODbMmKPDt0ak4DVMv1e753RI\nTjp3Ej7rRBRaWNJoQG6XFwimp67zRbRdYwbHGXZVRKGVqbZhl+8zAk/L7G4u\njoRGsLfd9PX7T8bmlCvMbe7H3tYmDiMlOGPVaVUCluTzNuzgNPl3gqezSc4V\ny4Dl\r\n=e86t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGmJKuGfZxiHcD2E5JwXKS2ntA2tLB89NAoAEGvC1VGeAiBywjcj7DciGM9SBYkyVRIQAsmi3zooQYaKje24TpzRiQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.31-test.1572691023015_1572691032326_0.34888410472814835"},"_hasShrinkwrap":false},"4.9.31":{"name":"ts-toolbelt","version":"4.9.31","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/types/src/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"36efc51a55f89dd959418101319fdf8a8f81b836","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.31","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-jgWBZCm5XtZNWU2N/eSUnkD7hrbF7a7v17veTENSEzb+cwptUTskcrtSw2TlBTDuR7yBopUu18zuBjQziUYHkA==","shasum":"184c71e95e09f5a47c9becaff728d74b138deece","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.31.tgz","fileCount":220,"unpackedSize":250387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvV1FCRA9TVsSAnZWagAAP28P/2TQWkey0GZWLEfBz4T6\nr64AakYkjBMPSF8clwvPv3dLtV2BP9s326TV0sb07pTYrm7Tk3CkQCu4O8KK\nkQxisvW58nCasduJ0PRkzM/6bRQQHOtZHvFEKD6O8XorRN2V4qrQzV2NUfz9\nGA3EoDslszqN9eNnSULNbdL9dGl7p18UQXMwjk4oEp9fxLRrUeN8gyB5XSHb\nDXrGnOxd8JLXmHea+2iI86DMi2+6cBd5GjzT7xA9t8AOoVQAkoUBpE69k/Nl\nM8D/lM39srNxUNDjKZheb7JP1c/7Vjiz5TBfsMOdD4VPB9Xt+p5DkcTcQDCq\nofidgrr3C1pZb86MimTjCADjM1Ugh6gjSGkoU/74kSnTKVBX1jNcZF44lXDn\nBSClXgin+arHqUfAA2lJDcFFPQWTEnvexbB6KHV1xgewh6uzdFvph+xqLcM4\nPGltwctw3wVbXkj6pg+p21zT7GUldg60jpTotfcGIHy07SR7zz52UwTyxdAf\nW+r17P82a1BaOLWMhuW72NyG7GViGlHNYCDJqaiCjUloTTPr1mzm4lmnMVSU\nSf+MhfkijRMNkjYNizeixOIuv7VkfC/UZoxz4ya4sTRWYRBm9WaumA8POjJO\n9NPl5rzGsQ0C/QbnNeNAL3/WKS4P/AoQfojnBsdOmI7+dw/KbyFrhFDvhJ1v\nc5w9\r\n=/dp/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGUaA8q/wSUjlj/cIJnYIS7Ql/jMwD4BcEVJcCClT7cEAiBLJbDkhPv+kSPfp28sx2OXTENOc20ECvWV/h/uz5iN1A=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.31_1572691269403_0.48378662333992395"},"_hasShrinkwrap":false},"4.9.32-test.1572716077837":{"name":"ts-toolbelt","version":"4.9.32-test.1572716077837","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e6a41bad3f1a08984e8db244b5cc3c1303cff917","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.32-test.1572716077837","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-MhGfiBVjGwkPe5663Hpw+dAEAax9tS8PKcBihS43SZtKIfwNOqfXjGzqzxFinNmlmUcKYDZRmKotDsykp0o/Pg==","shasum":"12f15a5d35f86e22b3e6413253ca53a47e8e6970","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.32-test.1572716077837.tgz","fileCount":5,"unpackedSize":272844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvb43CRA9TVsSAnZWagAA6RMP/jjA5MVn0XrrsVykZb8N\nXSGtazk58RdLZlV9CYoFNU6/AXPwnHccXnqlIEfKow5Kkwly59xRTnvEQKqP\nhpKpgilBYqrbqnmFQqpr0j7QBWXJlQ9JzbN+2UQTGvWc3KMavHRzrUCdvIvX\nqmo+zTTcq6cd15kac7RzfVNlmCCD9A7NKMrPxfFXqkTAGuBb9qmKp1hZI/pY\nqu6J8DRve4muJdX9uEEv7U6uNuij9Q0bRpa8ZxkIwA05SdLd9mMoLfvQn78n\ntpmVPoMgeu5OYPBvtGkNsJeQ7T1HPIdgYJihVaB3HiFgj+p9Ceu6lRauDM8f\n3dmh1RO+FZWZuz+x/3knVq1n63w8wtgjUrNTL6NagRsMqhfAJ08o+uuNS1wc\n9bbvxhQamFP5ZxRdrVRg7MMVKBImOeJa0XORC1go5gAWPbwmD1zwgHYxEjXj\nlKX9e9AwQoB7iu99ktEJcC5LRMpvbDhfapYRTJLkmB9goWsaeVEM3QeMS1Sn\nKxcCBzMYzMKqk50ozHMSeKrptO057VNuAqShU30+u1/GFJAEBYQF8X3fovQj\n7RfrEctHS9Z5poNbllLbzKNt8X0lbTVvO4a2FCG1uPetMKFcwLWUiJNrKwsB\nZ0E0vwRfNKmN1fQZdxPoETx9szxDM7cM0IFB7wz0w6St5RGKAWl2tQbPe57o\nOP10\r\n=a3lb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCakkCprJOg4WanUGLk+RDvG1/RZ/WMDchENavjSEfSugIgZU4Qgw7VhTmeT5v5iAtF4llI7zGa6ZudOD1ipi/z+eI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.32-test.1572716077837_1572716086531_0.4166388313815703"},"_hasShrinkwrap":false},"4.9.32":{"name":"ts-toolbelt","version":"4.9.32","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"e6a41bad3f1a08984e8db244b5cc3c1303cff917","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.9.32","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-yB5JAj6OMt7ymerQDpb8i2v+8leBg49TXaYeJ6nnu+NmH7ysUs796/edUxlNrX2ZGCrCA0PgQjNeuTTGeK7qJw==","shasum":"c1239f5dfc8bc3848a38d4183bc6d2cdfdd866fa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.32.tgz","fileCount":6,"unpackedSize":272825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvb8YCRA9TVsSAnZWagAAZsAP+gLBlI5LST52Dx0Q2WR3\n6NxsFmV6hajPx1D0Ok43BXFkL9LcZ7WZej4szRTjgFfdKVP5ViBT35/fkWaM\nv+1LmXehBimhMyYlDhc0ABzaiqIY3dHaRud0Kji8k/cgNTpgXCA62k5gNy6Z\nMruVJgTIj3iao63trR0IdPnyZ/W3Fd8dzpkMRq9BsBZXbC/5tXMGoXGtIAr1\nj9SNvsdrwR+x8pnup2KAN1QNMzUAvAVuXS1Ei96KktgJMi2P0TSZvm4tNb+O\n3IrWwyMYLs6IOYp071duau8v30CzRjA7nPDVXroiji9M4vyLxfyJTwVN0ZEb\nOawEijG/zJ63OZmzw2kvIdw2qbY1z3z+iyR3XBJKOXIb4J6NRGT9YPgpEKSG\nbaFn4BY057pPB8ZMiKiGMbxO/ghd3yvWm81uZUkG8L8ksx3MXPR/j0LHEAka\n0j0xqsGqrIZGSbewVYd3Tc96+5srMXZEW3QafxOjVPT3uWA3cOlctJpkUfXq\nOPfuj+As6JgwfaXmhYLTFD8czMx4NIu1zOf4ChRHZH8sYjDDPOswzKZgiInJ\nn2kIAXbpZerWz1UTH+nc7UcEFHVpnuMpLnqdcUinepmZFeWNmRX0XuYSch58\niE1p/tiLfg40mNVjvcQlxYiWN2zSULwbAmK3W6tsaNw+yLEkTaBRZgLsasee\nQWvj\r\n=SSCk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBe9VTh0JUDOL5W89xN7eue2m3C2VezhGPGo7JoqPeZjAiEAhHBpm2ksSB5M+et54U43QwC7Xm0Tx9d99WEcuXKD8qs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.9.32_1572716311541_0.06844400105062198"},"_hasShrinkwrap":false},"4.10.0-test.1573072618212":{"name":"ts-toolbelt","version":"4.10.0-test.1573072618212","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"49a87a3a13aa502f143c59432df6d9c5d0047063","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.0-test.1573072618212","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-RedHH8ORmlwuK8QKU3jNbw0imbvmNH4V3H7dlkxWdsXZvZ5KJH/notDXxcPgcsdJX6kjgKSKmmMiCNlsQb2htw==","shasum":"8f724461c699c027fee84c22b622b8e47822ff4f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.0-test.1573072618212.tgz","fileCount":5,"unpackedSize":274027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwy7zCRA9TVsSAnZWagAA2KQP/jpH6xYYB45xShb7DeI9\ndKC2gXU0EoL3mANgvwmUakyJMuEBOggymqHCCfjNNJGPcRU9HIXR5fbA+8AR\nChi6G3vGVKBtTxtyJexJxvt6wkRTvnL5jOZdZ8VF4/pdB5lwqa3gAi2ZlNv4\ng5YcXK+ARJAKqd2agxDp+1aUxFF3jAEmf6QFcNgCgs4j/ChZxfSUK40ScrEy\n0f3njfygNnmdvFGX9AtJKFlm0opuRjt7q/Z9/nM25gT3/LyZUZo6FckI2WhV\nylh98vTPKpLuE7iTv210qkpUnr1YPKDdgpjqYY8wpqXEAns6j3M7mbFhidX1\nAQ6b/9tenkY3QR+SnsvB4YSoAKeFkD0Z+Ze4+Nurv1nK25Duf0fl4xiuJV/K\nyE4vIKagUMlLZAZsq39cUK/iCqTo5HuvXLuV5rxaI9XDjZfq7Yumm8WvIObO\nXaKm2zgKto7xj3eK76Zg4NNolPDi48gYkOMH+uB9uJYDnKrNt6jBR0UuuSoJ\n9qYkzXVGslSPQeZbVIRe+5IPd+J07bHSKDmyxDF32C4+6Spz5VzhWunG87mz\n/iE74Pg7oTsxVlzbTwDN6KP8WDXnb95azOPWlCIJY7lpfLKwP6LhMLGIUMyh\nqhFftLR0PZcgi9ksyDSrmRE1cIkOwAcXyXKEOwgrV2mca++vCrRj3aHutPjL\nY1CX\r\n=oQnJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzQ1bOmlhpGPM03V7chreg1u5XFR2UiVK8ms0UFS0qkAiBqJk1T+qYEPSbhzR2ION9j3Ll9y0A14qlKsiekm+DLcw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.0-test.1573072618212_1573072626833_0.7726219967489887"},"_hasShrinkwrap":false},"4.10.0":{"name":"ts-toolbelt","version":"4.10.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@typescript-eslint/parser":"^1.13.0","eledoc":"^0.0.10","eslint":"^5.16.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.14.3","husky":"^3.0.2","npx":"^10.2.0","sort-package-json":"^1.22.1","standard-version":"^7.0.0","ts-node":"^8.3.0","tslib":"^1.10.0","typedoc":"^0.15.0","typescript":"next"},"gitHead":"49a87a3a13aa502f143c59432df6d9c5d0047063","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-dxj1fcbjCCjxCMOd+RSn5UrIuPkj7mItNFurYBAL/jJZzWU/bfCXYtdfYTdGZdPPKljA94IKNFypQ0FaHwHCWw==","shasum":"9e56436e3cd348b21672bdfbdc37b042d8d368e9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.0.tgz","fileCount":6,"unpackedSize":274008,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwy/dCRA9TVsSAnZWagAAhH8QAIkLhdB7Sn8OR6QIRZPA\nHzfZ+M8Q4kjAqpLtrMuRRyXQa2o1b/wK151Kq5xgSMi9zS96N9+PWKChr04n\nSgOFgz+x9GqS6I7uJie6Ra9rGPukXNkSugFL5aRjoZfK5Zs9z5xBSYWbIXpv\nytUSQWC1uwBi/RbBALbYnoPgwgAW+kGNYsVoZnkGawd1S3b7kHxmjNOzY8ji\nv91GDLKU6X2QpxwycVVwrEzdTotUVTcJ+f9zheqqnbsAc/NgSyU1Ydvg43fK\nz8jnMGJ60TwQn1AvwgIeGmCNLa2mS4GFYGdxIP8FUDR7Qgzgb5WC3mi04VNs\nCgbnKALzWwMcn8Zq04PQpzFkI2znvHXik08gRXlvDViuug2vFspxYDJZjdbv\nYMQVIXn/Fq90K1tMJAA+WDO+1zsW/w04BXD3mfsXvSWkIVPzjhg0JIc1WTBY\nT8M7regVZ12LIH6p6SF2Sy0gVkCqjxksEJWEFce0ADuFC7U2a7jZlOcX2rKB\n15nbipj8dqGkok3iYNZlopm0szJVwNeHht3OZhWgsireybzkeAoN/qpK+YuR\n8tjpDucS8q3JV3zhimf8gbbGbgERsLvEfzeObY+HH8IVEEomfgmiq76hhyTU\njZtTeQFhM8ey8Je+323GOpQheyFw+IwwWwIlDS0LmokTTQSDYw1YS5uBij7v\ng9+S\r\n=fs4E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0kKbRi5P1xra8ilMRO96dRw90CLDtnjUwGZOhrJ6XHQIhAOI1qBOj24igqMmuKsvnRWcsY4nwRYN8N9bVJrAfIYlY"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.0_1573072860529_0.2070803814207307"},"_hasShrinkwrap":false},"4.10.1-test.1573312232151":{"name":"ts-toolbelt","version":"4.10.1-test.1573312232151","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8","@commitlint/config-conventional":"^8","@typescript-eslint/parser":"^1","eledoc":"^0","eslint":"^5","eslint-plugin-fp":"^2","eslint-plugin-react":"^7","husky":"^3","npx":"^10","sort-package-json":"^1","standard-version":"^7","ts-node":"^8","tslib":"^1","typedoc":"^0","typescript":"next"},"gitHead":"59d0e1539b4a7c39360ea5189983fda77bd5d162","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.1-test.1573312232151","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ngX1XQnZDwMqhqKw4hAiQ/2wdFEcTjbAQtwDWSB0AyYRjCrFReR8cZcuhKnfRuRIDlRGcbeaRUwLZ9+JN3bXkg==","shasum":"ed17d67ce9793baed5bb656aa91bb7d210afc6ce","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.1-test.1573312232151.tgz","fileCount":5,"unpackedSize":274326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdxtbxCRA9TVsSAnZWagAA19sP/3Cpj2XsZ9i/m0Kki5nQ\n3ltlPZIVVwn6CgNqpZqK2FzrD5a5x1x6pPS6DpqkGz2eLwVGPPzhCkiVdsRz\nuwiqGet0Gc1+7xwct/dR/UkWvLqyRELMnhQA1gjgzFo72h0aMhGblC7xoI9X\nB9aKA8ekbCRbkzMDyslHqWfRT8W0Wy4ajc4kyA++riIjs5TKyJU/thL51riF\n0yUNAXTChXSZlU47E37yYbUnWN0RByXhYKBnNB7eaJH9pQ0bCPIWro79iPmc\nmy6GHj2ztNYwhKPwnqOHEyAjv6FmbX8jSMHTG1VF/1Fi5SFvdV30cNIaZ+66\nU6aBlB9gaqztwj3YahaOH4/a38Ux6A/0ldbDiK8TCQCcuPqTmtv3tf0fkBkr\nIOgwjn4bB4IB3C+gclsled0KdisXx9ga5R5dSbIWEv5STt33bCHa5ye1Gbk/\nW4vATclv8IPeLby/7AB3iMbGD3tMqDWd7QgSXjkgD2CqoafQXnM4D1ukv13q\nNSGrixCoxpRHWdwANhzJpl8XXZo6gugr1CG0ApwSnRZHwOk+FAGhJbQfVz3r\nH5Ca8oBmDCeBPWQzN0PRO3YLqLDeylJXhWrH1jx2vbq4Te7Cao+0U2cPnQHK\nsSOxoJ9uOMcTz1CCpKFjn/FQbMDl1CiF7yWlfsU5yzWP33baXls2BhA9brvb\nC9tA\r\n=JQWK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNB3omBjS5YORlawDryb+0s8sIhnho3hFW2QMzYRgKrgIgCyA57VZPfND4ILUY+Om/YMWVwanX9/AnVgOlfTYn/bY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.1-test.1573312232151_1573312240978_0.4617715547708603"},"_hasShrinkwrap":false},"4.10.1":{"name":"ts-toolbelt","version":"4.10.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8","@commitlint/config-conventional":"^8","@typescript-eslint/parser":"^1","eledoc":"^0","eslint":"^5","eslint-plugin-fp":"^2","eslint-plugin-react":"^7","husky":"^3","npx":"^10","sort-package-json":"^1","standard-version":"^7","ts-node":"^8","tslib":"^1","typedoc":"^0","typescript":"next"},"gitHead":"59d0e1539b4a7c39360ea5189983fda77bd5d162","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-lSorsvj+5YaP74Q9GsN0HQsH7zgFkjm+q9kduE4I4vn6JRmQro1x9yZ/G5dMi+mj6d/fxPfGTmjtDuwuaz9vHg==","shasum":"9d7825ce943e6e7ac09f267efe88cd94bc92b252","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.1.tgz","fileCount":6,"unpackedSize":274307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdxtfFCRA9TVsSAnZWagAAV3cP/RH/AIxIu0csruYRmaYo\nRSl3Bw7htXnqPYA8IPPT00gI4j2RDiCWRarL7kITuR/2XisULg2spL0k+zO3\nIhYBJeEEVuvj80IBRiMQnp9rxrSGLL6XzHgJf6FIHcrgfE/r4qoTA2CoK5Hm\nq4ZOgGQmYonzKkNiSkN2Kg8duyajaEwULxqm5p90+nTQ4cMMLUdOTu23hBvX\nOUtH73Sz7LuBP7hJ7ued3xdlxuAUdxvtobY/ZxL9duLdxvz1M81F8v7o4vQf\npxunXc+yvYzUCV3ksXjBSQ6fAj1rCn9qgZWC0ThWheNxyFU+4aR7DRVDlHBB\nTnPv7kFtOgkYgbPh0u7wfTPahDYql+yPzPRmnQn2QbZOXbe9SzQzmYcn2bf0\n/GuHdV+JX5ssBql9Lp9lPKnuVv35KLHyvp0vnIQLV5uvc/vNYBBta/LtCUeD\noUFGM9o4/Rju76d9cE5h534FHrZUpvIMJ2RTuLHTm7wFSmy/K0WHhB1lheVB\nlWQ9K2zDqf6hkQLYwAZHmbFUViP+CBRm+v6CQYxNQ7MKQqG2xVpwX+aOM6Nf\nWnusHUugIh4Od/Kk06reVxpxWccxr3NMD3vnpVvEV6IW8tmMp6W8pS8rzHCF\nob79GGefKhyHeE4EOwbmZyuDe55LH1Mk6Y7/TcA2G1J0N2jCEa0H5+fJ5Bqk\ndy1F\r\n=fc41\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/2am/U/hW0pln0PR8kQn7e85LivMAPOuJ1Fu4GDEBPAiBp8/uMRHkk90sEsdwM9f1ivYulJ6YvVagjDFMD5K/8AA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.1_1573312452567_0.28518803335472653"},"_hasShrinkwrap":false},"4.10.2-test.1573313867335":{"name":"ts-toolbelt","version":"4.10.2-test.1573313867335","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.x","@commitlint/config-conventional":"^8.x","@typescript-eslint/parser":"^1.x","eledoc":"^0.x","eslint":"^5.x","eslint-plugin-fp":"^2.x","eslint-plugin-react":"^7.x","husky":"^3.x","npx":"^10.x","sort-package-json":"^1.x","standard-version":"^7.x","ts-node":"^8.x","tslib":"^1.x","typedoc":"^0.x","typescript":"next"},"gitHead":"a37eb19a695e7078085135c7e9640db6e4b9090d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.2-test.1573313867335","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-FQz4XImp2Eq9sBPeRKiXPSlRWjo828Uzpnkh4fCPRz4L59x8r5W+4ytBCUjHiPwNZYDGya6v97K4FKWva0mHNA==","shasum":"922368ede43c64d25517cb2b4e35506c15e9d93c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.2-test.1573313867335.tgz","fileCount":5,"unpackedSize":274583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdxt1UCRA9TVsSAnZWagAAPykQAJ6Mm6LDQqWnKdaxdCj8\nWshtADMVMaeFc80wZDeQLdLN2g4HfUPx7zJg0ld3Ux39npQ0uNkXy6ItEN/+\nV/OBDTLJvqd1jT60IAN6PfNL3QZBilm9TQOXLmkF1yIwTVn5PbZCU+VgZywP\nUfovrtkY0XplKecPBKvgBhj8k/4GdPMMEMI+k1aGGW5goewB0i/KC/RF/GBm\nnwIzf5aH+FLNJ62M5yTwF9UfjAVth9gvNqKwoGiaUmJMhUktQREgU+R3lGVP\nqfm0mfjFPrrj8QDEKVw/R35Kxlv6xGqQkWXLGgFkjnn7RF/KxlGsWpDlZVwY\nhnLixFFc/1cpydD+Q7wPCvLbPWX8PDAGjMVn3vKrVSnLMbK9EspHf9kz+E7m\n2lxX/a5oZnnkwSYDaeNggYxcTJjOs+vGT+MiJP/NwraFrAC3Bu7pmnoOnycD\n411ev9v1Fex/aqhSbR82TcdDGf6LQbEnhboAtWyoemmqitEyHsLzpK37AJNC\nJAZvI4nZ6h8BwSMdnBtxlz/KUNYzpDFtZt2NHWdlFwi2GF2mywv/0XwbF5k5\nGj0C2Leg4i1+el+AT5cfmih76MOVwhGQOaWyfQxMQpKPK1eqrQNWeatg/CtC\nOxJrdwFemTBY/2WuWf9PEhCwBhuvsCvlYUpB6QPA8mmpChxKl7KrXxyALCxw\n/KuY\r\n=Z8S6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeEuPYFVezGi/46MQoi8O1qjG226fmJGpZ/UxmjxlMRQIgYQyVJw6mom9Q295el6KKrZChAJDDbTzNKyBAV6Vr/UU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.2-test.1573313867335_1573313876199_0.06536838329743655"},"_hasShrinkwrap":false},"4.10.2":{"name":"ts-toolbelt","version":"4.10.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.x","@commitlint/config-conventional":"^8.x","@typescript-eslint/parser":"^1.x","eledoc":"^0.x","eslint":"^5.x","eslint-plugin-fp":"^2.x","eslint-plugin-react":"^7.x","husky":"^3.x","npx":"^10.x","sort-package-json":"^1.x","standard-version":"^7.x","ts-node":"^8.x","tslib":"^1.x","typedoc":"^0.x","typescript":"next"},"gitHead":"a37eb19a695e7078085135c7e9640db6e4b9090d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9/BR39/pu2ueYuje2tWgPTg6wRC5H5BjX546p57+MOPLyAU1W7WOKhTIpqr/pCQBgqhwPLXi9EayqjnLiS6G8g==","shasum":"4ce57a156e7f0bdf24305ea544c3e4fd36f0cae9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.2.tgz","fileCount":6,"unpackedSize":274564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdxt4tCRA9TVsSAnZWagAAgtYP/2RZBi2axBoflDdaLnej\n9KXwZJA4gytJvXGBu6PkK5sKzkO6xMiX18Sw/fwfOClDKaaFMCz1Stb2OxC0\ngPzpSrDVrZPHR4h+6LHs/A5W/5kaFeL0QQhKDb3NyXhmEzJA9QUsIumhagzR\n2YSPwjuXNP8cNlSu9H8h/XofYp55c4cHJt/v25/kts+vep19HdxvYMXDcnPF\nG+B/vu34csb3OuyPivPq10U7tLX/n5mtuwCXXbiZgT4e4KVBkl/cVB1tBLuU\nkYyNZwgKrVrf0uGXhWcdmUQL3Hkc6fDTyWvswP9BTfF7QJgqAK3mApqs36nl\nr5+1cr78FAOWorYId2n4AQoVY/mzpvBw+TWfWYrhxyrmbus3d8SilJ5qthXs\na1HoYgZh0rSDxk0XFnYkphBEW3ixi0D1lhg1grazdSGZUuKESatao+hT0TAl\nyGe3Of8NkHuqElDNewTAihDXKsRkM6ERcrR6DbfdxTW0LGUrxf6tGdQ7vV0d\n55OmCTKtPkyyt0OSociWH3rdCbJLUTwa1oqflQ+zl6K+VLDpvgaaLHuG4R0h\nKQ5t5GjUef46kCl+ujC41SZS8bXwT22ZksYSsYdLG5BVjSAK/ePiUpGVWkwb\nzD/vbVX03aJ9KCDInBDA5maNoMkxP66Kmh02AxuQ5Dr++36nMs4zkk6oGej5\nJB0E\r\n=jYGC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDxcCLVbuuCP1I/tvi+DsHC6eHUEn6CZ8aNmu4enzRxoAiAiSqTtKG1UROd71uj2MO8JlOF/TUtAd7bkjx4arupYeg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.2_1573314093077_0.3466465400776284"},"_hasShrinkwrap":false},"4.10.3-test.1573339912213":{"name":"ts-toolbelt","version":"4.10.3-test.1573339912213","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"383b26e9efa1eda3186fd0b0178bef0ff1ed0f0b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.3-test.1573339912213","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-3CUM1W8QB3/Aj23xoQQ6I/5ZMnowDZ2KvJ6fJ2g1mQ1Sc0RQU2hNhTtNzZLCQ3cw9FwE8bPQLYRAZhyJJYszYw==","shasum":"2586ec9318a940665b5831340f2278275fc0d248","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.3-test.1573339912213.tgz","fileCount":5,"unpackedSize":274769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdx0MRCRA9TVsSAnZWagAARe8QAICi97YC4yWvJFfIH6Kh\n/Flb7ylbUadyHDCnlsBuYTtMju6DOma6bmL+191qf4Lq5NHKgQF0stUnuHyz\nC1+AJvaEklU1aWNxkEveTJU1p7mK6lJGcrDLUkUh9pZQLd7w9+sbSP/95gYH\nazSp/tAdx4AkAcrWwncRepoglHKni7j70o8pDQTOYueRvB4hyjBFUFyfrZFN\ncwCf3qzbhCnknM+m2VBp4BPpMVtWypmvRjDMARKqEXzcvKvlkjlgaBx4JYvQ\nrd9QInJBxw2SbubU66OHf33tjWdf6cpc88KJkyojFRFhkc2FKFsTUeAK0GzF\nf6IjmcVht8l+Ni3eSecaebxxBwetcESnNz/vpszUu5YNeOCVmHLIUtmZviIT\nDchZiq2Ulokh7LMh64NKAXNa50lHF///Ghl7QR0LYhlOjwRT0yHm8pYfBklm\nGMQdl4FmSXeFGOR4o52HrvD/TMOnpofa7xEPJAsIBL89oa+izhy4gCnKM+b3\nuVqsQXybkAkQrmpb/smBEWna9I2hYRq6AKgCc3howzxLBUjbESP27E8iadL7\n9dXH8AOj4cKSduWoR5FO5OnwKOYrChWMNgGMX+54rfJbu51mCsfpl5O7D3QO\nwdLSQcM+N1iRvT8W0yES9VckNn9gdZXUn9DWn5v1eIONHzUqLJbCfkgkbsct\ns4Dk\r\n=LwEm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBgHjycUrl6vMpW2SL+y+4vcp3Pa33/QjUFwoOG+9HoQIhAIrmFtJa2QbPFKIkqD0xG8WtXD1mG+zcTJpSX/pgI+yK"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.3-test.1573339912213_1573339920908_0.8761645303964469"},"_hasShrinkwrap":false},"4.10.3":{"name":"ts-toolbelt","version":"4.10.3","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"383b26e9efa1eda3186fd0b0178bef0ff1ed0f0b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pXhmcsbZnyAZU4jWzQc73ja13dxmRIflQfEe4dSrTKy8XXMSTIFZg2GWoy7WzWEdqg54HQl+HZoOuKwZsV2RzQ==","shasum":"2f2552f24ee0452173d82817b27d8b3ea4fc9cb1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.3.tgz","fileCount":6,"unpackedSize":274750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdx0PnCRA9TVsSAnZWagAAEXwP/3ew5OkDChuJx0VoQDYC\nbXK8pfTtsmwE9WmDipRlo5zMLDbdaF+jGMK6jl8VY5SzNaxBqQWrzS/4V+97\nV2aYl8ya2vkSghkImUUbDEDBbccuvZLbAloZExjbGQuPDuN5PL/RT1h2CIU6\nl3noBg/uxymsmaGz4pdz9LsPX9q+sWsCgWBNhN1CPYkH+vCeFWG7df+pkTh0\n4+/CxpkZUGG+zD1TKyi+nFDeeB0tGY0hMooKRq7L2ZFYzV9v7XE0vnDBOv6o\ne+3UW8qW3r6yUilz7nuV1q1DInuzFIWnnj+HgobmbK7zzzCWpHb3zmXO3Svq\nUqdk984aHDMbU3ARvabOFLreGgJkejAy7k/sH4FANKJ9yE8ofzWcMOE/6q28\nk800BUoxSeoub5uFChaAqNAh5UoB2C/KwKvCxKi1kfpftxZ/13YDGKeN6LC7\n8Br0Wi6/KvrfFHa3xIlL26VzG5KX+EZW01+PLOnaQxMMyZFE+EGjL6gsbTxp\nBtv2HIwQXZk0oFFcGE2u8L+Cik/c7yHD4/cRTeA/DYPmznQ7gLSkRYmFq5F7\nqUSvUgjlCuw5bvDK7n9zgyJyp8lWATG1skoputCFKMQB8vxBzxycey/uu3u5\n/AI9h4FLqbnkdljOB+02eMR6peJMKrEdMvQ2IgFBcdvJrgaIMBnYuF7LVfN9\nhWW9\r\n=YAXf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzxS1W8/4jky/sXvdjcGksEwY/QD+4FHqzAfKlvIfl2AIhALcL6G50zhw+tivC4mqB5kdwFIpVeycIZyFXT7UouiLJ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.3_1573340134624_0.5793025419011859"},"_hasShrinkwrap":false},"4.10.4-test.1573420513997":{"name":"ts-toolbelt","version":"4.10.4-test.1573420513997","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"c5101e0f4338767a2803880310c76a58659814b9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** brings **new capabilities** to TypeScript with a collection of more than **200** tested types. This makes it the largest, and most reliable type collection out there. With its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIts goal is to improve type correctness while adding a whole new set of **features** to TypeScript. It uses the type system itself for TypeScript to compute more complex types. In other words, its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.4-test.1573420513997","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SXqaLcV9yFgogYmMnXksPuQ4eC4SBFW7xjaeyiTV2hT8CDVbTvtWnT2xJHl/tNx8YfnZuZz9Hdbmm2o2+HXr9A==","shasum":"97060a4e99bf9a2b0f8827d1415a0281cb4ba1be","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.4-test.1573420513997.tgz","fileCount":5,"unpackedSize":275726,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyH3sCRA9TVsSAnZWagAAzyAP+QA5oOFfmuouraqGFnt7\nI431bxk93xXaElZOkb8px1bO+EkvA52txk60mNtq4xlFK3CmEJMqsnhyMedp\nlWjzOMM7MA7mRUS49q5V9O1nwSEK1cckUSq6XhOfGg3F7MusRW6Edi/BdBsm\n2ls7LHz+VjPfc6rAvts4R1pe59KVDXhT/BQO0bPNJfek2wzh3kALFjK3Nrji\n5GJbnbx5QpWbsIyXnpM04KMQYuEPWxi0EvrNut68h1w9w0Temtuo72HiZurJ\n3UdoDIFXbr5NuI+TMYPAlFxOY/eZrXbNULgnPsqN/X46we70b/IyxWPYOXHc\nyAszx4ef1x2L9HNUWsT8lCG8TEgm8mRwG39kgm5VnKiuq2WdKzEHrlrwEuEe\nqYf8bWExoo38tZivOoqRUtTCYxK02s8ySpNmDA5BAr6bMb4/STPciXk3w1te\nHV2YBgNzAm2Fg6y0LOi9muvYMHI1vmBefRiaGXdHKCoaXAvYNAorSLJYMgVq\n5GyJZ+o1HLdxh6j40qcu0hJDb2lJNAjMmv9Ov+VUKJFlDWcVQgtOpIOmdrLR\nA6q6CWNP7Wxo7T1i0joQbOKV4JXZ4vpUnnbXqbwlw7eIdo782tjmXx1BDIqo\nVJ7tXGp69Y1EQ9Zt0LiHxMgwsBEvDOLgBnds55uTkozMlD1ieZF19r0PiwXc\nDLJH\r\n=rdFY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/31UOnK4eloU6dhJ1mUp9Mal423AWbco+zFzvffadfQIgZiwtU+9ZEDi1+Z7i5f4jPz7FCGSU5Vn+MiT5D9sho1w="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.4-test.1573420513997_1573420523609_0.21489637078121082"},"_hasShrinkwrap":false},"4.10.4":{"name":"ts-toolbelt","version":"4.10.4","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"c5101e0f4338767a2803880310c76a58659814b9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-f4eRXJbDo0xdwO7c0qWGM/ct3O72kc0VW+llCiQmrhDu8SEJ4JJtlCE5JCmPTb0pCTjqXtfu8HJx148Fw9W6mw==","shasum":"2fd6f59e7240c673040bef2dca096a46502f655e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.4.tgz","fileCount":6,"unpackedSize":275707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyH7ECRA9TVsSAnZWagAAAT4P/j2aLVst47VqK24HO+YD\nSp6zxHM07MtdnhOWsgd+FckBKQBNtSLel/lhHLQCeNpy84DC2JApjo9rxTtq\nk1DCoK+5ecHTT+JT3eknaOGOvZV4JAqpWzgMlG+nmGWVVUDbSwlH7imbT6gj\nb1xI0uX0SufvGMiTQnmEDPTqAjSwQf/aoDOfjI5XHB3E+rUvHwZIKLan05J2\ndgBLo7fzRiLTihxzR5QArzxsc0i3sl9VNt0xiTZIh1MU+24RunlvH7qlf+2E\nNClmAY8PB4HzdmwjbWZva5bMLWnpKE4WfbGtAhYPzpGUamb88x5RjY7MM5cw\nrBWVJLlCAuYaezQzATPjWkq/OGw+jiIpGLGS85PcSZkpyT2bT1p/84ugdr5s\nMNW/FygyfUNsRWmRrK0A9G8h/J3RoNw6TmpyOglymhBlMfVgI6pGcOupU6Mw\nEbtOrVDftodNzpaSHC1aZSFfmeDbEkbrL9lkMznVVdFevtzdF/j8BkIIw4Wn\nqxRANP5kZGkd7oa+fRC0QqjR8ildbKcA7RD6UWLlCi4urGZfcCKSTqBTaM+s\nzT3XYi4hs2rXa2bOGxU8Q1G+hhQSspHDvDuJn+ZvDktKaDBTYU2MiBXwQZgs\n3dwDMBW82lIYpEaI6FD0n05cV1Ow4tKVQ8RrPH+CVEdUyNMyd09asNkyIBva\nR7Yf\r\n=4R/Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXzNNu/QhGRvsrKqaG5U8VG3sLZhptbwuq90GHWJAiWQIgbnKfWiXEUv0YoC9IW/e0DG1mBD9WSMeZg7/fiqdqVGI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.4_1573420739785_0.9214512594734712"},"_hasShrinkwrap":false},"4.10.5-test.1573422577662":{"name":"ts-toolbelt","version":"4.10.5-test.1573422577662","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a54b09b1538336d76a65cff8ac052eacd88a7b57","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nThis brings **new capabilities** to TypeScript with **+200** tested types. This makes it the largest, and most reliable type collection out there.\n\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.5-test.1573422577662","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Entay4ErSmHI8IpbM7etP1pSmO1SjKi6xl48qdPAsCXPoueiXYgqbCdtJTXdZR5wR+wlUNv3678ro0V5kxQWsg==","shasum":"15ec8bdd1e6a3eed4b4724ddcaf44c7903f7c662","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.5-test.1573422577662.tgz","fileCount":5,"unpackedSize":275909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIX6CRA9TVsSAnZWagAAgGMP/1jU7IHP7CNjdtPp6zXS\nGTHv50ka93dVKUplJn+//1rbUqAY9w6aXupDv+jgdjSBnLlpYh/mMMVTWz4O\n2peUDKLBAu31RuaQBPzd5AMisCvbkfpo0P+UCAIBHtoe1OoetftBYD/LDeZN\nYg0Wb0N4AunqCZvYBuAuwE5o7ATiGwtm5DR4Rw2a/GOGKeb+SSdMXwqXyWf1\nFqCKyi2auQnTNzrAqjTF3wchKNxA2785U9gNetLDJIlH3sPq+at/NnPLuAfv\nyxzyBdlLdZhkLZx4faTtXBHkCmmK2uFWB5VkyQLidD7smHlLIBSwCLj5ZSwe\n7Pz1oJH5eVwbfCzjsPZXfXsZiz4WwPd99/VJ7bjFwX6c6NiNA9A0fOGA++n8\nhQrJ06PRt1lYOsi7tiFIu+21HfIvM/dPzs5CGSCNJuR/vD7ELlQ52SjWRvfS\nUjlPP+LYmOj2EL17AiGPcw9MHnf3So5ZSyHFi9hCB/JXgAZ/8G3oN8X7oRRs\n2ezXCTi/ezARaun5UMPXowx38OonzpeZP1HfdKdMGWYqPwg+q5v9Q46rGXZr\nTRwnmnUxN1DATWRh/9C606ksjQTRAqFHifGjQajz8N/Nk9SVrjrd4hS6Rau5\nS4HQ3ha5jAXIyJQlFeDmQGt84bVvt85SatheRtR3KmO5dVKKQQGBAGHGGU5x\n5WiV\r\n=tbWS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqt5LiIXpReyp1mP/hRuL0zsseImpWKP3j1wfKv1FHeAiEAgNI0TnCG2f2AUwtLfiyW6aDHXfaONknNRRTuJf5tz30="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.5-test.1573422577662_1573422586146_0.12242838725399152"},"_hasShrinkwrap":false},"4.10.6-test.1573422767793":{"name":"ts-toolbelt","version":"4.10.6-test.1573422767793","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"ea4fbe9edbe7ccdbf8bd320bec31a343e0170936","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nThis brings **new capabilities** to TypeScript with **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.6-test.1573422767793","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-z6I6F/8yvxLncKzYTV5ZSfkWCPez2bzD//D9asK7GSRhLG4T2b95QuMlsqSUKDCYMdxIGI8Ubfe4JtiIenIEXQ==","shasum":"d1e66da08b3f8c3a78358df74fb6bf0b47e52418","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.6-test.1573422767793.tgz","fileCount":5,"unpackedSize":276126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIa4CRA9TVsSAnZWagAA5kYP/ioMCpOmpjrac3MXNaU8\nDEW4kwHpYn3Kchlq1te1a6FR/Hto2+2tu+9xVpXBU+EkKhLr0Cnnf6Nq1dk5\nI6QxuEc3RtpT0kmJ9kOqzPMZgsMjoRKgT255gbTCuv+B8jyeY24Nqzl7710G\nwKh0ce+gxAsR7RdE8n0l+9wper5RR5tEaKw4vmwxNVXP5l+qmlP3HmQlQPaa\njm/iQu+nc8v3j3xKk/pxlt2Y1JCtYOBXZ85vhFfx/QrGks6MfMaVgqWTf8qg\n6ubKs/P1yOMVdN1FZ5i+cfREzdjM6pz1HGzNrwfn68EXSRXQAg/QHt/l9EOa\nF9xZuYyo0Le3z1kmboRwIA+LXSDiE7SuXfZpZMP1T2dd9HCEzVTRolsKamJv\ncGOG8TE79r0id5ytJVW+zu9A3WKvnN0hJpcVjsoQtW67nDkLBf79CIpqneN7\n0D6eXHuVxV+XNNxoHCYidy2yDIu5RYoO059Vgorq6PMYj5LbENS/vmC5lVBy\nCBHWoEfHvrUg0fk7suM9k14zLrpu59CIDj8t89n6gYeTV1J/2aXCqdp1M7zv\nIgu/+ZUr2kgXmMyr0X/DFbT1PsIt3Yq8LZlwY4xSBxvw7pHpNTR966GNjMTA\nhfwSdPTGqXZZ1cF0TpHXxuKpzPA4FBcCWRkF3jKdzO1n3MxVe2HzQ/7P6AY3\nZTGO\r\n=YNVb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPEQ0h4g6wI9XaK5SOXXZUsfjzlQG71s8EWl2GQ9axbgIhAJ4Vx8OK6qXDvUQtdRYgPtHRNsvmiP5ZxHLjiPbJElCI"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.6-test.1573422767793_1573422776558_0.5198727044688145"},"_hasShrinkwrap":false},"4.10.5":{"name":"ts-toolbelt","version":"4.10.5","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a54b09b1538336d76a65cff8ac052eacd88a7b57","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-WWVoIQS1SrXXvfIhEChzjgsuiO3ahXwscQ4GPJEOC7CSzhgxMkwTF3hyKRB5yQ1ZKDlvPUcwB0MQ0VaJ/+0NWA==","shasum":"b36b0ba0e887c5363363ccc08f4761573a7bb992","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.5.tgz","fileCount":6,"unpackedSize":275890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIbOCRA9TVsSAnZWagAAidwP/jrRhcB4lpq4BHaMWo3h\nbNunj0DWrLRRzxr9GukbjFwi/ShLqrYnKVCJwyW/oHn4eag25c0PKVq7mxcT\nkEQZ0jh8O+MYoarpKNQikMn5mSLgFTX2cimi7unTQgRhFmxD56cWRiTpGg0i\nVIKFcI4APF3KegPfYE8fHm7hroXobV8+BqStQMJoMCEFWftRzscXFFg1jI4M\npC4GyunwQjnRQ3/mpQVTFQojCp4BXaoCgeA44X1wdHfdhnjxK0B2jFPYXhBS\nxIkC1/vySVKqVh3IQrFpVPb/KV5rPCgtV/J/GYqFHO/rCC34lA0wuOyOmclZ\n8djqInjxAJ6V02IRnmuUyn4lbjJmbH84IggMzdnSkTCsHGVsSHMDyHCDr0gb\nKR6MGWbye4GotKbdVVmNzIfTltYCl6GsfhOMRn1LchKtsZMtpwvC7boXmZkt\niTDqP3qTg31qmU8Sq0jAQ2OVkMWjjS6YujkNp5d3Hy0S75Tzu1H53Udjlh/B\njX7GKCmzACuJkyf/Ab7C0uRaFCsnR7Or4NBvuKTvpSSvhnvdKjyGui/8wrcK\nwuAAWnl5QW5mfwbLLIXXCGdTvrBdB/uqPmPYxrJmhj5Fx69uUqvwtnlvrZyg\nlZqRcfXJ98m3FBB/M96vQbOQPYjqnLSq/wrH37+Y+rxf8mq+4lOnetLYjuhG\nmhWX\r\n=A09s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAMUpj0MYrBbkUMNMucHF35KZPBCPwkFJ8umCbEqVZxPAiAB0/aPPel9i558s2OvZ5JabCuoa4rVKT9TxZsoWka2OQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.5_1573422797989_0.6963236674015569"},"_hasShrinkwrap":false},"4.10.6":{"name":"ts-toolbelt","version":"4.10.6","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"ea4fbe9edbe7ccdbf8bd320bec31a343e0170936","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bjppcv2o/tDLe2o8SFr3Zz0faiY5Wc9NdSJ/Gr2fDOl1YXCbMoO8UATfvBeC8g/9T/8m7+arwLEOzLqh7nsaTQ==","shasum":"e7e475e028a6581b7eefc545e6ffb675ba30fd24","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.6.tgz","fileCount":6,"unpackedSize":276107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIePCRA9TVsSAnZWagAALP4P/jAkdRBup/XML35ZSpUo\nfN4mQNOcpc6X+ue4rtxm6ng+eghaxolmAHaUct0g1X2oOHQt40aw56arNeYc\nKqxxvMiueiwciTxjpwL13EnvpfN0tCgeRO/sLHys1jr96efSs2a4pgKfM530\n4qquMtnI0M4k9hqwaPAarVuqJdr3EobtIXkWNkhzbuSLaPenfFQ5JAf4Aagz\nEDwut16lTU4LrSe87ohXR4XH6gm+sA7t1/ROSL1HPJuY3WQzRAilRQ4+trWJ\npl7jJc5pLcjhEXcVhWFfCgVOBwB7n38KNkFGhAvDf7LDsrkl0t5078QDQHtN\njHPt5L9gpZwPgUYypXxmE/oWGKotpMeRTZqpxqu/pnWoWsPVoYLOobKAF364\nvfSWQbLgrTKzTyHVDKs+yEgRux68fE8ABBypNvieLqJPrFh12BMVJKQ3TAfQ\ny8THcZ5Eo5uTk7Ryydaf4BKIl/RGDh3tB68Vb/XGrEX/VS3EYGxj5P+rY9NV\njI6aHSIh5Pphg6rwTRH/u07e7coGAcGzduZvvSonBd7owsoIppLJSPRHD331\n1V9GFs/ukzJItwSynlyD1tWLmifbaACe19BWRD29qj57MS4+ehgqIbZ+oKeb\nKnM2fQ5LLnpTwXYfYflSggc2RJakQokuSbZIQB0Ar2eRw9U2cuy9bTmg/Aq4\noulD\r\n=ow1f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQeXmYQxVLJJS4B+fBLj8Nz30ivrIAOWZ07huPL3tXAQIhANxXtxgoTjuF8E6dOfgQogqY7xVlvsrAZvZkxhLLSaEV"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.6_1573422990727_0.9276285090631131"},"_hasShrinkwrap":false},"4.10.7-test.1573423020449":{"name":"ts-toolbelt","version":"4.10.7-test.1573423020449","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"dadf1a565d5a8ee8b371cd268adf5a33f367e439","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nThis brings **new capabilities** to TypeScript thanks to **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.7-test.1573423020449","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-AK/0YIeWZGQFdb0pkiRgqzywWfXgut88Kdm8G1mnz7cGvMBcRrZN7ZMp84PyZoCcrHizrreLzQxpCBnB5TNdfw==","shasum":"d5179634b567dab7bce82087ec10ad4110199d3c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.7-test.1573423020449.tgz","fileCount":5,"unpackedSize":276349,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIe0CRA9TVsSAnZWagAAhzgQAJtOOQmhgwg9srxW5Z5w\nfCpAXCzvN+XHLmwzrnw6uqUaMoEY6igBIqgpw9VKuWHj64JDSeK+KgiTKUgl\nB2hed6R/lC0HkqM+EjivhNX36s01LKEMVSFj6k94rBnH8OR2gD3zZ3MlESeZ\nLEHXb93P33Qgi/EaZdKbN9IpluxDJVQwtnXmr8tTYXA4KCK/dEtqdwxRoU+4\nKNPwAVYB7XUGJJd5yjxVia3qqxR2enNRHcWGTl8MUz1lPE0rR0sICdVG/Cpr\nZ6DgCUvwYK7C10N/M8xYSYZ1EHmvkFeBABKAurVobqGfMcZCzRQJsa6mJb7f\nPcs+autTKWirSAAAKRHJhhg70M+bf4Xc+s/cL/r3ss6N26Etj9eRK5LsbHN4\ntomDln4Uppw2ybvyw15h4AJDNaSl5qPfdbRCPjMpkP4BmzUA5mCe9pOawEkF\nSQ22qSKCc5im+MSHg0YLcsDLgJ5W1sYe8MWj+TD/v0+2z/KCMwXmgLbJ8FkH\nuQkJrHBSuxTS6lVv8CUpwjoHI0zKne3KeYi2gnHM4Xds4Ry5eEMq737vbLRT\ngQbsuDXirVY9fqcoDxDY74X65lmkE7g+Y+zYG3s0GlBepTmyWXEZDPmY1Zit\n8fALm7YMBROW/BxthsJSAhVsR+FDEcT/SXHB2KlVT9Apy2kNn4AB4DeDxDgr\ns/st\r\n=FTy/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9YPhQG48AjOshzHs8XDvMCluXBzQNlFaH1zHvxcveYAiEAw8fOr4oYQ6+htugImKJHHoDtyXNHIhquXHRjL1WBKoQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.7-test.1573423020449_1573423028349_0.4031786810721223"},"_hasShrinkwrap":false},"4.10.7":{"name":"ts-toolbelt","version":"4.10.7","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"dadf1a565d5a8ee8b371cd268adf5a33f367e439","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-4YDe0TWABZ4i8am1Bup0dwGii7c1rffZ7MXE7q4kmG+ixeiKUAnaaO75iBrw04v6vJg/VookQ0yOdDD0DEQhHA==","shasum":"3d076afb0e99209cbde458960b253091040c6808","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.7.tgz","fileCount":6,"unpackedSize":276330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyIiGCRA9TVsSAnZWagAAmpsQAJhfJUK6mAXoCsSEVUM5\nPQEjQhqPMB6mQozN/PG6mfCizw93e+RNyFSmHYBTyuUOX3PNXq/bXNExMEE2\nsF1q11MdX7uXfqUHl7IOQPp7GvXXVn8hB48QQkhANewhWoWNRTLoq75T7U5w\no+BFReegRBMqFzDnUX6HLEahgmtFveEeKaC/wKAqwcH9uxImjenHX4Zx2pfe\nO7ruPQ8ik2hLdiNrhDOTvhwjNru7bwjYeAduSKTAlYY95nq4Sa0+5qmFnbu8\nHgKmRyHEgvROInsuwkTi77WXnwi+kDzsRcq0a7lNU1eg3R7qXxZrXmFjZ3Z8\nIdPMfTtJ/XvYSr2FF8dZQMepMKqtB42OcxmDfwt5Q37s5CoyAEiT6iePDcck\nn3grGT0ZeQZMgCEJrLN3LV+M0wGDD4AqmUpZYbnza9V/sxP/LokMXVQvcrbc\n+0MdPny4cP1Mcy20S5hHrurPrF0OCejEYdK4yUZv7VpBOlOSvQSjkyEuzLA1\nx4YfA1coHHDEixGJNKu3A0lVmr5grxGFvHGyLemk4zhzK0COeLl4JdpAE/yo\njg/NGnyxNQf4JhxrzY6SBFpRifrOaCE+26yir2SKA/c2OiWH9LvObZI6jyOs\n1jCaQ12njeHPkOgFbZp5RoQU0AjmrKlEZ6owYw8wJdW23kqVfwcnvjznZPKk\nT2Fs\r\n=D2To\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbMmm0MUOkdJm8U3J4G7K0GPnZf3X8CHP6tBXGHwR0FAiEA902uXW2FFx7cTPTSCNwX4BdCLVzEhEoy376VQxpaIvw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.7_1573423237757_0.5749073021592226"},"_hasShrinkwrap":false},"4.10.8-test.1573764354198":{"name":"ts-toolbelt","version":"4.10.8-test.1573764354198","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"263b088a9cbeed8a5a155db4d94c13ee1585e16d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nThis brings **new capabilities** to TypeScript thanks to **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Computed types are always **readable**, like if you typed it\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.8-test.1573764354198","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-E9Pi5WRiuxArHHTg9HvIW0OP1z4wGKAhsBd6yHeuaW5PM0tVyUUVl5EArgj1WWfRrMxKbT79coCkmhlG0Hmc7A==","shasum":"1995d13a7e01d3cb75f9333f97f37ff3643bcae1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.8-test.1573764354198.tgz","fileCount":5,"unpackedSize":276909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzb0LCRA9TVsSAnZWagAAAzIP/2lmzJjHk/G9GkIV38n9\nlokKtQ2RkBoZ1YgdamXbegDOqPIpBf1wsxZ5ffU1eGChXQFQMmZBjyQUPM27\n/rZi0ekOTJBBumEcKYPZSMWFaj6/43RR9ZCHydU4vECFuHQES3/0OkXukCrO\nsW1StTkG+BZGfxyelLg9DuVw4SpiiUMuwn8s8QPFqR6vdnknnFkTrCYW9vZl\nYzxm/TNwoeNnXlmVV3hjEzovJUFsEl8iwLVd3H3LOnFPZqX7ZsAow9avsu38\nAjU7dlIzWY4oNxe5h4S4WuX5JdkK3NOO44e+e/TfkayLyAX/Tq6Ig2LohCam\nT9HrULQvTerIu9AoqrgqeCNh6AD/Ibr3LZb/Xy0NrbKbfHvcyZFS7f/KOVTl\nJKnEQUuRUrH9P7YvbdoIKhPK+whjFncPfnVW5IeydWiB4NpO5x79+qfNZl73\ndASztLOEcwmodIJSnAePiAN5R8/9yH4x7zZivBJoZ7TLOYcuUpaibGfL5smq\nB2J4xhqynCyiUWzu6O+h3Z9o9zxSZU3+XR3dok/Si48VnjgovqiWau4dRZWu\nWL3GQh7vA8C1yb5OzQ5Vrd9dyRQEHmFJptqABrBbe1Kf8DgKOkvNwJbWlnwG\ntdT5MabcXk+it0rMGPNCou/ap9BPFsfcztUHIso1u152MSIruBmXmNP5jRZo\nWD5X\r\n=I/u9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiciYl1zYiy5n7keU74TaQWCB7Ntexwfgcy7LmMmiy9wIhAKtMQOvIARXQhS4ANIQXTcL4ylPOynr3KELMc8ee3vGZ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.8-test.1573764354198_1573764362882_0.5166457244153173"},"_hasShrinkwrap":false},"4.10.8":{"name":"ts-toolbelt","version":"4.10.8","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"263b088a9cbeed8a5a155db4d94c13ee1585e16d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.8","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ExcghPTsrsfAgcxZ30YT9jXySjd1j6wtV/xcyxDaNCM75w7vkxH8wuuHG1gYv9v2sfiV6F/7LL0lH0QagleHLw==","shasum":"f04a0b5bc7bccd52246d65b6bd99b7d4d340e7bf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.8.tgz","fileCount":6,"unpackedSize":276890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzb3lCRA9TVsSAnZWagAA/XsQAJcmG691neZP5ySvUiQB\nl9l+lCTUmrWlQIeoSgsWgHRmKpcv3WKA0ES9MvmUHCvnbJi0J5Apg0cmQcTr\n5w+7dKNyvIgFWIspaX33dk8NvO0cpmh8T8Z7cxg7U4FOT+xNBTNjgQwP2eNc\nXqHFCcy66ByQL8HMZtMUvnDV9K2DMmjfF/K93cPWI+iG/4Rw/61Oc8P8e3L+\nsO3e5xdVGnd8tGlgY8s5wrQG2vP42IQRDnl3oOyteWpYfYxwqBRNZpWP7fmn\nCG8FHcqVuQD49mGWi0/3iEgZZBEk/PCxaUeM16XZUYTbdHbRbV4zBd3uZZW8\nzeL7/N/gHiVsp/c1sLWP7EUp/J7wH5Q4dvtqsKCXCbpmWZa62q6ItCzTPozb\nLjWE2p8cOJpAqqYvIoEFPK15lBkRJhV/g9MolicVxs8yz9Y+Z2acPzQL8Xu/\nJF0iwNSba7wgxqkuAUKKx1NRwQIBiRMZGrz9WSsaPUq16+jnrk57oHPcGxBE\nnT3ciYF1dnLvnZABY+7sBxAOKyy56pC8rdT/IZacc1J6JGB7M4hIqrdEydgw\nwKl3R/kRU9cmYaAz9xMJK1kG040QqnQfjOumJSEC1UWZe8AsJpbB2eGiY7Kj\n/qcg/NosPba4n5KW/0m/3obj7Uqc5Jfob9WSVdiSUubpNdCIypSw1CKiYZle\nTiG7\r\n=/ALp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAi4na8wev28fkCOJiJe2rlxHGsxRZkAXw5n2xCaEtTAAiB6FjeO0TUPztSmK1KEe8tiDeobz2TBdDeSeYLtNDgTIg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.8_1573764580822_0.987033508162662"},"_hasShrinkwrap":false},"4.10.9-test.1574017152370":{"name":"ts-toolbelt","version":"4.10.9-test.1574017152370","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"7f8fd4d8b1e7b410281085cb9fa8a70d25d1dfd1","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript thanks to **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Computed types are always **readable**, like if you typed it\n* Promote type **reusability** within the codebase & external deps\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.9-test.1574017152370","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-k2CpvMatBllKx36T3xk6mreGm2mJ/CekxZ2uCufiX+utX+tcg6ende5KqIWmddAiPkNUW67rM9A0JBi86umc4g==","shasum":"86212e40b26c1173556b7c2d2922c35d9d7e3c22","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.9-test.1574017152370.tgz","fileCount":4,"unpackedSize":107140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0ZiKCRA9TVsSAnZWagAA/McP/1a4eMXASOsgp/wYK9oG\nPmspfwZCTHDUtukyjqMw4NERAIdsj+CHorDJCTcquJ/JZBkJPjcibIwjCmzY\nRX8qV8KL7bO7hlOuxppAbbQ76z0bywZ4d29wZZwpOwnBJcIy6a3h5EvYemNL\nb2oOEQjx7lD8Jc3Bv4SFNPtfGhxPmGeOyeOpaPsI0pp3gda2U5ubDOZs9qy9\no1jpt3ecjOMUCWzM420AVFr2DWmg2WGpSb+bOrgIw8Ah2Pe/u7DY5CJe/vG+\nbK9ZyhWp2CiIFg2dO583h8KULCj4z3NrisrQEZuIomzOvQOCVWMwaiFcwEIo\nv97IEIs94mn1CiTmgibJmn0YPvS0uFPBUakbSlJrRL8VkqFBqrJHO5Six5ZS\nFQdTtyTuzSlg/PoxLZ/y6kdDuN24aqXTLzSbU08QFkdcy2tMyoBkxFSIibqY\n5vRSRkre08WUFiTSSlz1psqN8KVjrFqUzSsndNKGzRQl+hIk6nWqcphJUQu5\nV94tB7ChX6aavKfOqt3M/A5+BD2MTCQf5JqF3hh1EsNjhlZQ7XpBiTH0Vgdl\nhSb2EXLyb2tWoX3XaVScbvr7NTdeH/btc/nUIpX3etqQ64s7NoMll9i35Sdn\nZUxoPkf95+ya/k2YG74vQi/m6zmg/vGspO9QJMuWlxQ5lp9pO6y99GS0O6kk\ny+jB\r\n=XEZ1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDRx8msB4Of+a+MEShlSbVzC/hv8Jbslc0IDC/MxeXMhAiEA9tzCDNYZq3C4laZscswyUKjW7WmTjPwAXyaftJfO/wc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.9-test.1574017152370_1574017162098_0.8747784913631884"},"_hasShrinkwrap":false},"4.10.10-test.1574017299796":{"name":"ts-toolbelt","version":"4.10.10-test.1574017299796","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b7192e00916d46a4076d0e48e6ff1cd8c5556194","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript thanks to **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Computed types are always **readable**, like if you typed it\n* Promote type **evolution**, **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.10-test.1574017299796","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Si/HviVTMl9yF6D3fvW9obLmA/pTNtFXeHTbKDW1Wv23ISAZTHb9SoKtw4oX+rUW1STK4NmjKyhKVak2dRs43Q==","shasum":"090110afca2d0a78469d0e2c3faeb15374202af7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.10-test.1574017299796.tgz","fileCount":4,"unpackedSize":107361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0ZkdCRA9TVsSAnZWagAAMzwP/1QDoGyCXbcS/+tCE4aY\n8ZCoWf1GcPQlAMFo2OQH4HY6/9f8d1FetWNKmTCgEH2gykcF43UFA36exKo4\nwN+e5h7mKvAIWGwN5rwHrPR4kBkCorAFPwi0/5E2/FrW9He357YxJ3y2WQh4\nU6i+9WSnKrGDKnM42AvPAK0KbfpM8fW80/12xaV61gLIFD32KsCR1HW4cUSN\nYGafCnPq1BIwjiu6Yezm5RMk9Qxy7LjFUUxOBhwTSms8zWfjdsS5WbPrGFwT\noUfE7Tulgr4i1+uOW1NRk6rGCPwCbgMzWlKVpkkS1anrSrtIE87pq/mgpkot\nkWDWvDXcGnl0NySfO5fgR2YWO1xYt+cYypz9Cks84rVNZDxxJizuwhdfZPj2\nTc75PLdY7HWflONHiw9MSH7GLS3Q9xUJ8bRUCNAsSfBloDAsDqEy5ka0/rkW\nCT7QG1m6AlAoFKwHcKhLmdt+j00QD3Uce5oZo3GGFOeFlmvr+uGkDYoZK9ul\nYSAhSWHFoFa+9Tclme4Fgz2mrb1Nqn/e5wh+Z1ztREHBQqkEDSeYE0zgBUue\nzX2+d/ovgCzYjRW7aQ82DzNK+BY0w+iBQO/3D3RBnQ80XXU4ClPV1W9iX3tf\npUXn+e68xGhPuESoHhCzsjba+NfrpKjVMwrmklD2NfjsJfn1akAlF3jEP3jD\ne2p9\r\n=6u9R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+MrewzbaBKa3kcZEJI+G1CnAkPNWPvjqYy1NHyoOwKAiAh7vmGEzICg7c1gV8CE1kaSpkWzsW4CQVC/okfOD8mMg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.10-test.1574017299796_1574017308738_0.6151408038212822"},"_hasShrinkwrap":false},"4.10.10-test.1574018470935":{"name":"ts-toolbelt","version":"4.10.10-test.1574018470935","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b7192e00916d46a4076d0e48e6ff1cd8c5556194","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript thanks to **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Computed types are always **readable**, like if you typed it\n* Promote type **evolution**, **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.10-test.1574018470935","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-KP1b7nYqbU3IPuCL7bXQSaXqUfPl+S16UJ0Fg+qpcZpNL9qGvQs38/ryg900/yE487h9ZrQh1uDBRZDwAsChPA==","shasum":"34cc353f160a5ed4003b723a36cd7affd8efc27b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.10-test.1574018470935.tgz","fileCount":4,"unpackedSize":107361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0Z2vCRA9TVsSAnZWagAAWcEP/jPsvLLQvQ1KM2GfCgfB\nGNLKX6E//4fMPjKIwi/PwPDT/HeRMaq1viEJrvjWonOSKxjx9XkBJ2yVWM8R\n+T6xvcmR/7vyENCNyEK71swprALqAHmeOlBoQfGNT5Sk21DvKXAObuVEBtJ8\nqt/2EmKGXTX43Se8OQkcVOQ7nxU6ZIbtTGQ2CuX1nsfG5uv6VCK4ZJF+XXPq\nePuzyct5TNVtctIqbcWV97fgwMuyRUxqrKZjr6qyFqyOl/C8BSkWAU196XbH\nPnZHx7540PVNHrJAp9j5ZchnO7O7tmhMA33Q+8rX/rAB+1S8gO33szjnTE5g\nbhAn+tOfrj2ZIuXj8VBYs3cAegFiImQ7zro823VRMXYufum29yMAmO7oSJkz\nEQHxdtZdXRp7cRig+C8E3YYteZ5YrSy4HnSjxR6cFGl5TfyVqt6dyp0A1iIg\nxwMADzEd/Z6DwtrWdiO9DVM1VovMn4rDn7pQHq0iUBEMVKeKJ/WXxd/q2zoA\nG3GW7GpjOFRtHf+xLHdF2CkY0uRP+7kzx6xaGPLp12gioQrI+V8DYPHrkseS\nTQzkqKfrU3O3g91ejVqnGKSJORE6CL0TOfEoP3SO0eB6KF5Q8NptcB4WvQGk\nbQGiytZohB3VaZY35+0AOW/lhNWQUQlS45ybZnZCNtYVCe5TJVFr9Liz9CBf\ntwCS\r\n=4Rm1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICTWnsmNNSgaVm5tIHImr9LxD5T6sc9YDrlFEiX+yE6/AiA0CDvqRdEhgxkbvcdZJlAKOyxzIP6xKy8f8JvC9aJJXA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.10-test.1574018470935_1574018479091_0.5600075936025422"},"_hasShrinkwrap":false},"4.10.11-test.1574025244015":{"name":"ts-toolbelt","version":"4.10.11-test.1574025244015","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"19608cf34875e0d4cb582babcd8ccb4589805424","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript thanks to **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Computed types are always **readable**, like if you typed it\n* Promote type **evolution**, **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.11-test.1574025244015","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Knms9j9BsBooEPD6vPn8HoErIci1YgYdTPkcW4ePeoR3+wG1moQCayDCmz/ueb1PmDS8tGjnnotdA5E0lbL/1w==","shasum":"598a9204f9d531efe80405a12c147f2c91a43bb9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.11-test.1574025244015.tgz","fileCount":4,"unpackedSize":107606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0bglCRA9TVsSAnZWagAAvSUQAInZyjJxWNDzLBmOuNTj\ne4Vo7ceZUiZuX7y7rBNw2gSvpBR4wDEz3kBr8V/lXbTvgJpu5eyr8W+bV3Y2\nlE6v8USeSHYVctyfvsLRBBZFZeeGRxatK2ZhChoXtedItWucCNtZA3trJzpx\nXV2bnmvecBVwU7rpxmCi7AvuKsgS2TNJBMgxPpYd5m643R/fUw6NJrlun8oJ\niUCWLKqCvPhn2ZHrPCuf8XgvJJ1M7UhUF1KEWQ7bJG5t/wSlew8QheBPcMCw\nDcJtnSZUr/NFVZ886S1juDHex9hNFM3Kl/VRv+CUMkUlk2nnnworZZicslvQ\nkCcAyPaEefLSiXpc1SAR83c8hhuqmjZVQZYglm1y2/tk5UwizAdt6ohFzROO\nvhQroRkEErmJ0ynvmRVC+Uok602/QUz1QBnUl5WLCZIoxtHh+aNC+5Nt5g9d\npUHfUHCwgyoB+GSX7lVfTrMuqA5hzLv80LbMaXt8zfKrjT49BHeUxgaOAlYo\n9NF1pfyyhn62ZuvHndJW01Il4hC4g3jCO89UbrDNQKcNewtI+OsSYyG4PqNn\noofEXQTttKZTHdN721Eyp9Dqq/Q1UnvOaY2nlDWad/NbT4xU4KVHP4oJaEbC\n3DveVYk/fM7MH37+/L/ubQkWIOKA1AKjfUi9wqEatmemiwtR83yf9q7rUZUa\n0ZC4\r\n=UzfY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHqqqJnUh25ZZpSYJ2FzMixHH2dXaITQfjPjKn2oSCyUAiEAuZC6pQURIj0GwC8aS+XCnTKzIfmSL4wn6mmUHYzgnUQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.11-test.1574025244015_1574025252903_0.9780588145552105"},"_hasShrinkwrap":false},"4.10.12-test.1574027043756":{"name":"ts-toolbelt","version":"4.10.12-test.1574027043756","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"bbd00ce3b8c4a8ab08048285bec8c07751b8e6eb","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to update, change, and compute **TypeScript types**.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript thanks to **+200** tested types. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Computed types are always **readable**, like if you typed it\n* Promote type **evolution**, **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.12-test.1574027043756","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Y82hGikWwtJurCI/K/gsE3WIb09gnIiR++CivuVF4m1098zLDlpzeR7BVNkOLjILaGHfSYAa1qaT1LKzTwl/hA==","shasum":"7ca12db7dbf55a6b66ae804a76dbb58f44e47f76","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.12-test.1574027043756.tgz","fileCount":6,"unpackedSize":276536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0b8yCRA9TVsSAnZWagAAbFwP/j4p7+ulyWiZ9psPeVuE\nsaJ2DQYzbudR6h4gLgxDi9/GS47D1iFzZq0DphNCBKORbVrSDtg+JW2z2pzt\njiXgz9/ll//vA6w6ALSrW6pdK0pCwewW8ddWyqxv8BS/dqKwRbn8TBo7hIRe\n9nC4x2ER7nQRE4/3pZ8xnwXpuMAEohOpRSSsATTRcTwaIIdrUNRSqmzcC9Tz\nUfO8X2Qg6997c8faYNc4wO8gW/wXB8sYRB5xvBmVcB5dwdmisEDR6Q3OhwEc\nh48fVIZ1Qvd0mnoh2V8mpybW0VZO5NSqI+Qw3newYcz8AssfST/JmOFU/lpR\nt1lMaoN6tRHcjiAhk9uxwZTFXmKOlp5DBN+5Mq3LkUtJkoKzbS8ZRtYVXP8X\nEOytlJUzikIzs+9dDo2vis1aUAfyVQ9nUXlX+6W8AcCRcDl78j7NxXzPxq/m\nG+RNQg7mfFrxgjbt69Z2emcUrIezM8FxnxdccdjoJbSn4NoQqXN4sN7lZQMp\neuzS/8gyLjlvxdhHFWbRhCSg/HxmJtLm7RjK1AK3dTRnXTrDMaPkaO+AqoIH\nOyo9oM/shoM1R2mxDu/vq7brChuIUC1SiMEree9iRdvLm3aEMT0+lQ2MZCnj\n0WUyOqejK+sUi0Mi7pCSrdRbtVdn37JAfZbRY5lIHoBHkE8VSVCdLm5ETKDW\nRJsE\r\n=owwM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGO75/E4QTqU4hQVSbrHQ8iJoz03EUSCwdIC4cTGV7XAiEAoa4tH8/zRPdEeA0++OSLCCSx0Upaie3uu0t1FqGY6p4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.12-test.1574027043756_1574027058313_0.9137849207223845"},"_hasShrinkwrap":false},"4.10.12":{"name":"ts-toolbelt","version":"4.10.12","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"bbd00ce3b8c4a8ab08048285bec8c07751b8e6eb","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xbKaAFXn8Oq217uMn+TVvoEi/M8/APL4zpgDkBarZ0wVHqOm8TVsfh4/493uGeUUTZNwOn1l/JCEhZxdhHvvYA==","shasum":"fcbe041413c5993adf6a199e2062ee8a07ec9b5b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.12.tgz","fileCount":6,"unpackedSize":276517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0cAJCRA9TVsSAnZWagAA2kIQAKJSJLQJxel0sgbfHFvc\njsUTWSvVt8XXOvcMg5O6Nx5D+/IganP4QphJqvAQFeARoq7fPSt40yiJG4Uv\nVntW/logmLL4PpUF0LaTtXlcbt2XzY2UlLkWnugUXpRFjBmCuFl694mkgNgJ\nEBTwzvOW/ttqJIh8LThSk0DPsraa2BWTgSr4zyoKYEqIvAeuBWgI+JksXp27\noo9bDpLvPWCOWh+Q8NWb3A/OaNFQ5rn7R5psN7UeQa1gV8USFgQD/wANBIVl\nsKNzXf5gaZkVqNKG9tJEV6kESZ9c0XIjLtRW0Zglkhl/Ah8Z3s5G5xgXZq5B\nxK/LA/sP5AcySa/9WNWFdLjYCRXPQa3mIZaw5XW5WB7RfpRH5UvnSHh0Pbng\nj6TiiR6zHZVlbq0T4Q7yDCkZOfc7tbeY6M1uPZ/gpXGOtrRQRczKNDrM5+BL\n9WJRKO4w79Z3w3EXW9H21RzjSwntt5HJ4pEfcM9xBW5snkYkfeDQoN1zAOcP\nC50Mgja8QS0dZaI66kYih84wJl3noAS3wlVVkaMq6hRKsJew1cApb8WzD/5G\nQq2lia3l6vD1hwv9YVYKESHGjPmKqsQj9xvHVEDBUxsa2LBopz7fS9gVer0r\nyxkfMH7A17wrNPgejitubmJ2xHU1HKTZqQP72J8coC9jPDzxckK0zXy8NLSW\nMc1o\r\n=o6Qp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHdCJr88UmYJMab1QZwbhAq9klvCNz2RiKKFZMa6tG0wIhAOWqtf2xznxGLDFvKRX5SlaOlU1KTU5DJhcpZQMWrvQx"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.12_1574027273343_0.10019820107976085"},"_hasShrinkwrap":false},"4.10.13-test.1574082161307":{"name":"ts-toolbelt","version":"4.10.13-test.1574082161307","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d18141c11cfe393e933e14525ac325afbaeb1867","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.13-test.1574082161307","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ACHHHM2qdwnO2u4ve4t6RAulji10NfxPrVz32wY2A53A//O82BBmXYLRZVVzkgMDbp43weClAqgmIRFbw6KG9Q==","shasum":"090e83dece2ee05d2810984e8f93ea2964502ddc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.13-test.1574082161307.tgz","fileCount":6,"unpackedSize":276880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0paBCRA9TVsSAnZWagAAfJcP/jWGsLeSXKR9tMRCaL9Q\n8GfAfIU4/xLcDWidhwBnuXgRYJLTHthk2tbOW+61MXHPm3ERikVl1o5vEZT8\nJLp1BiBcw9E1Y14mIeGHgvst0oV8ys6MCI0cCqO/MNaub4pHrI2HNVn7ZqHP\n4aP7vZFKgPpOihANZuJVcuuaOsNT0+7+xGe+Clh5A3k1P/zjCf4DSRWzmkes\nsVrfIZm4Ma/mx9B+N0AOY75Jtr46duDtJDPfAyw4vqnKZ35jUs1lcGhd4gCN\nVWYnU8y6vxfjjyX/DKC/lVsE2Z2gAPqL8Nyxv1XJsJrpvo8CYls6JxKSVn85\ndc0aDJZj7TCWFK2TF8aqEcJGSOh4RXWOYhawbj+nDGiWPO9lEkTcPXJFHOxG\nUYJEe6Ro/D7tC527LhkTRC5svYnP4C9Z4stKNJZKoOqedDwunvd8Gbxfm04O\n4W0oWtpSblUM+0gLcT6GXcW1RKZ0GEiFp/m9da8+ABze4vL3qfE8qBfZQZSd\nJc0wZ7fj2XMIUY2lEbq1UmmXPiZdXJjrZbqjf2sSmfAOi2ES+1sVW3DZOrKm\ns8d0+XfKZm2jSOcOmmXp5gbwSREEaSgoIpENBt/5KX/2zn3nOIEj90r2hRKR\niJ4295ZA5/zhAjVIuNV6F1pUmKuiAlD3PfR0QfijdMvu6+DVBQITjYbIxZhz\nP6df\r\n=NyKT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsTL5+/uEOU4oZwm944S/UqD/4CNC2NfnwfDfFOhF9sQIgUv/0dWHYqOYjtqVZ18QorTryGBJDlgw7fCh+wLSVkjM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.13-test.1574082161307_1574082176780_0.5918603862768137"},"_hasShrinkwrap":false},"4.10.13":{"name":"ts-toolbelt","version":"4.10.13","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d18141c11cfe393e933e14525ac325afbaeb1867","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.13","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GsbacJF1pH8D9uWicfFfNLHyFlxmtbKDEmXjdZoFUON5jlc6x51ofMyw8c/99zYDaCnx9+Y/oo+jxLKUI56sUg==","shasum":"c4f14c5feadec54f66ca91851800561ebf805f40","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.13.tgz","fileCount":6,"unpackedSize":276861,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0pdVCRA9TVsSAnZWagAApzkQAII3KVRSj2vuCiqHArPI\n9FwQFsKdXyrzvdmIZxbdw936FrAA9XETfe0VpahGpo8ISG1p6SLEVVYPTP4q\naubF3vfQj6joO4hstJIn29H0wShIX5IKVfy8pMxN0HV8lVnWmWQ3VMky9GrJ\nzWGv/OxXLIkbzUr2hOnYldfhEXelsiLji44KBn8bCazUC9rtik8xNO7AQvUa\nNvIUDrGf15upyZnbjF3Jw1exFImMxySdJR9GZ8XubJ53dmCZJ+Bl4ytxW3wH\n3v4wZYoYtaott/NsQ8YSNAwfUW0G47TnMs3LLwWHVgVWgQHpPtYOSu1gJF0+\nda2/wx9MlDOLwkIQ3VecrOO6dDG8CXNxkP2X+EOi6GzrvxiAAWCYKVB6vHkA\nx63rHfDYsgSUWlv0OpXqhHVwgpJtlFwA6XWZYTFCawXRoDpYS4NgrCMc9wJV\nZaeVDfDz0Fk9h65Sy7Nx90A/EaNnSJyUtU5OBeffG0Br+Uqdac8VO3YccmkN\nVetUCcxd1WmT/a4SaVWyaDfqWEsNm59G42GvHTIUxtgEatVeegliC84vH9rd\nM0jgDSvBLEN9grFkZCPFUx0TrnmdqUO6Yj8sb7qgcEyiaMTSv3e02zAcfmr9\nCjeaKBiEk63OkGDGux0wc4A8FfrOSpVAQH2isBY2T6Lzur1CHTMwRbE1Gq5P\nIp2a\r\n=0axh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID5QXJ6dg9EB0jSLDCiAavwFSENQ+W9PM2ou4UB7OTaLAiBKEUSb3V9fMm4F6kihVtXlh/jBt186YofHGuYZuQvMpw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.13_1574082389301_0.22821700916382914"},"_hasShrinkwrap":false},"4.10.14-test.1574278814205":{"name":"ts-toolbelt","version":"4.10.14-test.1574278814205","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a95d8836b735ad13c61cfecda039bec4a5ea31e6","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.14-test.1574278814205","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-tnkZIT8B6qrEd9fdU5rOVCCBDUWVw3+N+TigrNZpXDgAwRWt2J/KzmOL+t30l7Wjju+4xI5jFBZTuDntUf2arw==","shasum":"f327d8a57767368516e13ec2f85b094a62671760","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.14-test.1574278814205.tgz","fileCount":6,"unpackedSize":277134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1ZavCRA9TVsSAnZWagAAIxUP/AkDIUBlYD52t29MDNG0\nNnUSOBWoqCe2Wj6zmJhns87Nkt1HJRpvAemX57EWPGWUwCM+oHri+IY0NDbu\npu0fwjJ66fGMcWav+LQaUDRqst9In0MGkeoTPf7ONKSwRiZLwIjlXna6de1N\nhv3uWL9M+sflzlO88ONlfQfqOJZTMzvPLVBuiYfSntLuBjFybEh20ybWPYaP\nkK5kNFR+BOV03zwTgpQ9P23PZ7UxZY82j/uGf8iMFpw49QTKIEVcWqJNUjLW\nebOR4rbg0YmNK4IX9Rq/C5MGvhN1QTMnjn9pI6a1K4xKdF7ZpJQPMtyZHMwC\nw9hz2WXYPT2nmGMsDF92QCuc3WXMpHu9IqYACCUc0Jas65II1qAFMP9ZieC2\nq5KjltEswtFgTpzEuIjuh3sOw4SZEU1XUP40dc6+DwghHFSj2HpG8Nwo57mn\nBKZOMT8tF6Ycr5YLns+EnHZw6639tyBJqwz0yZf1zka9rRnvS4P9MLLw9gXU\noG9NqMW+NRFmCbkljTNn/mHqupO0DPnKn4jwIsjZWvFdbzqWLOHyviDiaU2S\nr1ikNL8h37uDjWHyVyV65WXNEA4BFAdQ2HSh0jnjdUmlHQQqhhPhO8zjgeKA\nIBLii7nFwDjDSYSpMnVBL+lWCf82csjxnfGiNgbqJDIY4ZIzYaGSbW2F/QW3\ntyRC\r\n=+yq0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH27xPYu7tclRrQrf5dDinVvNpKcLY6+56a7xZSFaOigIhAJRDel2EP1v6W3m/mMdrLcSYZ+68DgmYDan8Ecj7RdXV"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.14-test.1574278814205_1574278830279_0.001261447555273465"},"_hasShrinkwrap":false},"4.10.14":{"name":"ts-toolbelt","version":"4.10.14","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a95d8836b735ad13c61cfecda039bec4a5ea31e6","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.14","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-gpeQlELgnGUmhm091s4uA/QjVe61oR8SHvLptmgWS+I495mqz0EN9EmCGfFXAQ6lWw1YrSx1ybJxY+8bJE+wQw==","shasum":"e7b9ebbc4098fe3cb9c75dc4402a95c23ba5f9a4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.14.tgz","fileCount":6,"unpackedSize":277115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1ZePCRA9TVsSAnZWagAAIHwP/2wn2xfo2O3F2rU6x+MF\nJ5vhlCqE23phoVxVHoRpqbvHL4jDrsCdDTTh7PFHdr6mb7Vcf00Jz39eQP20\nTjiEcmr105cUGwAUcv3fFaSZTxqjClUIz5SJqhXLm5sF4nkHzc5LBAjLVEaq\niH5GAqOxD+j9yCl086W2bUOcP3x7/N0OwePLKqMD1ZzQCIuvFpjfAalK9VHl\nptVcC2YRR6QyvUmSXmi4tFo4Q7fJ5irIC0SO1wSelLZwkzr6Cx3jjCB+/m80\nHI0VEosAnu4ri5Y5haSf7qEGGcS6jNYwEbWSsrNhAe+pRkuObcKNHTtCt2Mh\nQqvfd9VWMJkmMqeTq27GA1CZIgqzJh6jSO4Szs9MSBwO+uDXFg9qzWlpYeIt\nrBLhXTJy5WWnasL47O4WVXRGzQzgFS4Iod5sJjG7V8RSxu8eV9RUPEYCMWqC\njvwLS2VpO0O4+ooPz29Fj8S4o6lgYwxmVUagADhMCrFTgi1dk3gsWRflYcWe\n0w/VE2vAcC26j2Y+z4d/t1D+FfGAn8S46NXEJ05PX/P9A6dnEOH1jvm5l1vD\nadN5p48G9u29Mi1wXnW/q9CY8BmcXUQfkRSN1IPuVKAOqfYZP5zoMOWdF3gg\nY26aHutdpGMwcAuhJzZfpvCbI7avHzTz/oEIAKUuX5OowsNtjMEoWnvY4CS+\nc1kK\r\n=Ut/P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZ16RYk6mR3ugpVd4KFkE3h4HIVMtsdEWOBM5cx3g6mgIhAPWym1NVa31pvyTmroPCaPs0+5Ljg/hE9bvhD2/FlMCY"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.14_1574279055481_0.5009457274532558"},"_hasShrinkwrap":false},"4.10.15-test.1574283974210":{"name":"ts-toolbelt","version":"4.10.15-test.1574283974210","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9f58c2773b84f68da4be7e9be9241c5b175d7792","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n#### Where to Start\n\nHere's some of the most useful utilities you can page through:\n\n|                                                                                                 |                                                                                       |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        | [add another entry](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)    |                                                                                  |\n\nIf you feel adventurous, learn [how to re-code this library from scratch](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) to improve your skills.\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.15-test.1574283974210","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-jV/sU+83HgLQpdDwvS2fEH/I7ipxNbF4B4w45pOjPRBSuZIOhSYwydP8zU0Hp3Gh1clI03Gf9uO2W00LqapHnA==","shasum":"629bc0cb9a915366315b791ffab7cceba83d8990","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.15-test.1574283974210.tgz","fileCount":6,"unpackedSize":280317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1areCRA9TVsSAnZWagAAUDQP/0JNq3L33T0amgiZmyJF\n8qYBDcoN7y1kr12wSvceK5FYJveO7niQGPZqo+Hj8xUfMWzqJJTNgkqRU3DW\npZeX9CYqcaLxeF1hyd0ET7bWS6GjQPtwNU1MPjAnBfGNVIPKsDv3XyZQoXqr\nIi60WNk7b/TBcVM0aszFgJU2DNpLf+K4eErT/4NmoHaOaPva/35iuXdpJzXP\nGqoYiamGQhJHXGHkvPcROSTDWIceQwSgw3E1dJOibjqnK6QNyKM2CSV8Ct0E\nsvoKzObYVsl4EJRoq/jz0mrzv5gtv7IwPJfG9e4MZzEMTwahBYErzLpqP0sk\nGe33ydbOUWXs/VcSoVVP+ZfAquCa2/ydXe/reWJNVAI9i0yDPqDXV93Uiei5\nqVyB13lIk12d3GP+eStWOTl7F1diSEKCU368jA55SNd245GTDgejgnbPG44f\n72v5liDDoZ9MX9BFmpZ24WDqrgVuI/ytVALJKUUM125qXC9bMXFcy2vb3BMw\nUaUNtO6wHkpZbIJA1H0kh/ZLAGRiiay11fVw37daZm6jcSX0H3UpwEE7alMM\nUSdLZGLuEY7u6Vq52kG6X9TuF8UNhvgEes5pQGr+7bU/i1MeFzipEgpJC5lJ\nEKWh/mV8rh/6mta9hs4y9oYtHCZa+0FpjtLFUC0gAL7kLgYMM2WXgK8hhSYm\ngums\r\n=CmrK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGVS9XTpDbqmvWR+KgOpedksB1nVty2qXDvrvUGD3L8aAiEAvBfBazmkZU/xPH957/0XV56v6vtUTQgHQdFmXkZJV3E="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.15-test.1574283974210_1574283997806_0.4240711061961666"},"_hasShrinkwrap":false},"4.10.15":{"name":"ts-toolbelt","version":"4.10.15","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9f58c2773b84f68da4be7e9be9241c5b175d7792","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.15","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GyfbdL9/r64VRijtV2xrVWrHBgiQ56ETJ8D8p99GY6hPk5FMBmyditLje3BAjeE0WXgqaZWCbsplUMy/1rp5RQ==","shasum":"15ee7691b046b61b2c2e80ba9e430615c542b5a8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.15.tgz","fileCount":6,"unpackedSize":280298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1avMCRA9TVsSAnZWagAAFR8QAJVOMnzf4GqpYqAqNW1P\nNCsh77SpGjA6RzRpgUSwInRqa9JlprwMCHF3746QA44KVJ7gm/jMg1kiRwon\nhIKgov6t7IUxKlClGnMpkflc7bJDBJ8d7pc4caZcUylPVc/YNrMs7XwjaIhF\nWt3hDQynp71Gj5exDpjKWUJ9akH22OtW+eI66W4zdRlzXO6XEI5S98CzlU1F\n9jgdK2iZHvC5pM7uCux0kbY5BHlqh8s46qt/xxC4jW4MzpMpSeir12Wd5fid\nHO+9pVLqVFHZKMuM1MJq+jBq4tTgYs0ohtluSV8cnR+VOS/b+Oh6xaVYs6EC\nJHGGMG+CkiQquWOXaHoFPx5fMkNBZ0IgpLkphmA4v/2ldqrYH+PtW+UW5ebc\nMqwvWAMhOWjZc6BF9FegXw8axDgiUfqBB7A2jbdmHwUFa7MmxKwZhOyomSYy\nQIM6m9SNODu6L3d7wfPRpeD8bQuceKBdWuWDAPfaGOyT9Q0rJnWia9oOLmU1\n8keQltSyhpEueK1i0iL0gmlmtkSvmJ/W9QWyb0SpUhDXZY6U9ORqpXahe9dB\nfc8tlk0dAaXkS1CBOHhL0SmPYtQ7rlj+EZhTxMNnOEXPGi6eXw4ICmjgIUAs\nvf/avC8KE4QgnFcFhq/liEYicIiM3DRb2bpiHizM9xVsbLVd/XmgLeS/dgk6\nmXyv\r\n=I7Tw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmcBl6Qof7m0AuyPtVa9+XRN9RRDmj5wieDh79QDxwVAIgJ6kZHB9GKyTSgkQKeV4OMW2PcUyE7s4yusuSKg/tXMc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.15_1574284235543_0.4641216895967333"},"_hasShrinkwrap":false},"4.10.16-test.1574285575441":{"name":"ts-toolbelt","version":"4.10.16-test.1574285575441","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"90e68bf51c43d229b3500834f59b8c10092a5f83","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n#### Where to Start\n\nHere's some of the most useful utilities you can page through:\n\n<details>\n<summary>\nExpand List\n</summary>\n\n| Object                                                                                          | Tuple                                                                                 |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                  |\n\n> **`TIP`** Another utility worth mentioning? [Add another entry](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n**If you feel adventurous, learn [how to re-code this library from scratch](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) to improve your skills.**\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.16-test.1574285575441","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-8KmLvi1x3Xd1idl8Sz7UsoNu9WNLWofPpbEXqxhQcV7JYHo8TRjuphEL5SZJSYm7eoloyM+5xRV328PhL0ylsg==","shasum":"8efa33c4b01bde8e74c5fe5ef40dcd91b8e45c57","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.16-test.1574285575441.tgz","fileCount":6,"unpackedSize":280728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1bEXCRA9TVsSAnZWagAAx5kP/1n6cgOfVdRaFc+UBt62\nOKEAD6WCRhQLOYjN5jy4Ua3kYO3NvwQOB9R0v1p7UpSW1jSij4TJjwV3ezoo\nhMWB46+NSuNLt2J9YTeLxrNlIsKoODiEhwh87BsKIlg8DrnrdCEV0Soj8mQJ\nmPi9dZf26XaWyTIr3vBxKYuK/WXcVtMuWAR+RhVvGwe322pDI3ykHl5pM1RS\nzucORxNzUf573uVw7RccZtltO0CvoOQPQyJ9oNx1898rB7eQ67rkWexe2RQg\nPxsBLmIU1r/uBjWmtE1ZQXrj16vTxSLo+Ja2mBTnnqEF3uo0kVvwQUykw5CC\nViAxQAxPsE5PIZkk6XghDbFTAQUx8MTcm5Nqq4q2LpQ9gh7S2w/1hcFu/2MB\nAYhgDmf7ZoLDnQwK1vBjfxXRpDHr+eqwUGNYvWZdhHDHzTOdh65ehYgLxDO8\nIrgoPB3ji8/kYUIn9s+p5UzPh7u4s40jI6nj9NcPId+dKsREWrWmZz1VfPcs\nbkf6F1DiEjVXW3Z+dXNFCCjwbdSPBlFTd3FiE6gVPWYPoARB3rsTLxXbVP6L\nTZsBO0HzstrstYd1/f5nmpfr1i9AS6v/oW0tsGLjcsV7qKGPk11soLi+jE/R\nZVdgB8sR918vq+FdSc02vzWBW5mHbMEVpAM/jJQ5axRsY6kg6NytjtSUVw5H\nBsfD\r\n=o0gf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkzScvJibpdf/ue7+82J0ssnSZ3InNm9S8AYo7eK+UEAiBxqBVfw8qXdW0VXJesQk35cJKDHzkal0opkO0DwbIakQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.16-test.1574285575441_1574285591055_0.8800908930710458"},"_hasShrinkwrap":false},"4.10.16":{"name":"ts-toolbelt","version":"4.10.16","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"90e68bf51c43d229b3500834f59b8c10092a5f83","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.16","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-vcNE5SNpeTr9tOexgGj67gBRefWYvga0QWpCyCgR5/+MFMA7M1TpOWGOu29x9a4/JsBddl/rUUpiUdlKeFgeng==","shasum":"cd3c9bdcecc4d4cc7c6e4e64060e957c08111cf6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.16.tgz","fileCount":6,"unpackedSize":280709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1bHyCRA9TVsSAnZWagAAxpQP/0+FoQT1t4cOH4nLsm6v\nGAtrOxzH2DC4PinhnxtfA8XEfzXLGpG1ex0Wt9rUQpouOIJA0ZGkcmKR/Bfy\nl+tWNcSPLGCnK6B7H419KXoAkvveXvpWqUnaEo/R3nasaT5/An8IZSnBVWCn\naQUR1+7HSgmSBjQ585sOoMIG+PhmG1Ao9ahsrfPHkr54GpOcLtf8pqQVwlk/\ntHnn42y8hNmjcTsg6TUisPBiEfZ52Ft0AEmYwZO1CNc1I3SrlTWBTsvce4we\nm9xb6kn4aeJCJCRJ2VfUhMDU2D6BdfJg21MEg9YbpoCU8UR0fgmzcKOYf8NG\nhcq2OhLpqqnfDuQLL4Z4QxsJrhSLkZdVjCfH1AzVJQSJaBpZ1X63dAbclOje\nWZDTFhh0811aJaDHnwjuXg17b0u7C7NO5QPidJ71iSQH88bq6hX2VMtKW8Mk\nCfDXiyTtqlqEVnG63Bc9V1/FJGt/mZMszonvcIPOpckt1aDbBWjhWYLuZreY\nu90nvnlnNYLjc3883WAuGcu4HzL50/q5eohYt4WwQvmV2fLx0JZFXEO4DPUu\nWcl0ontQn1OAkMLPUo6GRhTuwuX2bP19MQ9QssAVKq4HOlF2f5D+xN9qiwvc\nIpvJ/Gx7eApGowLMUwAw1Y7eEvnsbP/DyrHnZf6LigSTHybINEOUPComAkjl\neuF3\r\n=fOPb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDx1I2ebvWIT/bOz3evJL9q4a0Kpsy8e0kXFQPnExsEOQIhAJv6Ld/kbUpQnAz677L8ptu7s3oquuknG/iph1Y99KmP"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.16_1574285810105_0.1654027902078994"},"_hasShrinkwrap":false},"4.10.17-test.1574286287061":{"name":"ts-toolbelt","version":"4.10.17-test.1574286287061","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3f447ad2a010acbe9ee6915f06ea9815d9b60a7d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n#### Where to Start\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n<details>\n<summary>\n<b>Or page through the list of our most useful utilities</b>\n</summary>\n\n| Object                                                                                          | Tuple                                                                                 |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                  |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type kind you need to operate on with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.17-test.1574286287061","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-YB7qiakKzz0v5NrMSYHTXE0zKRbdpK4coKFT6/6FBT8+mleY+8Rdyan2UomVDqDuugYVbHgJRn6xgjSYlWqpTA==","shasum":"d6c49ee77ad6dbd61c9c153d0c99104a0e25170f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.17-test.1574286287061.tgz","fileCount":6,"unpackedSize":280870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1bPfCRA9TVsSAnZWagAAt5IP/Rz4QV2rCWEPCWOjjfmA\nxZwPAfF0LITqwT9Z3oX2JxzC1d87sHz2PFrdKAN6Y1D4+pW9eF/dWKZjCwwV\nlKS+yJNhNOG2J1s0EPxqXI9nEq2MQKcc0PC9CBsklFRbV1V6O4dkcOi0N5ty\nI7kI58ApG2XTohhZM9f0WjqVwhj9Vo8hZq8C++r3Cd345C6e6RWE6QuG9D9G\ncDhthFwW0AgE9hw153ygG3eRGesqgPQ5MZsXaL9MeRAyOAOGf47BjEV+GMj1\nX55OQxntjBkxSKCx/YiQ49LKr1LA6B+kApqJZ3uuaqIAcML+0baiuwLS8GUj\nO3SSzjcA33XyNN9eFXMHUHnmrY6sFq6/FCWcruhfGkI1cqNLcnkNRIldcG3k\n9hfxz126j3ZRe77uy5tgjybPcxGklrO2MUYZiMwju4tjf1lsWuOR1zG0YMHv\nrAH+iSwZtFBqP5P/J1lBBNJBW556JwUsZp4oyFKIYz0yrS7AsOA785jt8Z4Z\nJgmtWCV3vv92SpTvfFDo8ISDnMLW55NYOvVo9NWIpe4ErT4GH4Vezakbmw4S\nbH/b55GZ0+gq8P+1RtbSsVhKqxzP6L/NQRnXffplJ3ZcECDfYb03XeXwCYOZ\nkmFnTbxIPFlJgbvzCmSyM2g8RzhZut/ZZEjo6p/scLfLnJ6rzob8a9kvhaMc\ndyth\r\n=b20M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID6NIP/0TnOCVxnmNOGRrzi0XC6022EiMCj57nPFseVgAiBuEmrIV6QFTsMt3z1gPnN1ChhO9vETs/0IxhuJTEh4qQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.17-test.1574286287061_1574286303569_0.1955372942198581"},"_hasShrinkwrap":false},"4.10.18-test.1574286480959":{"name":"ts-toolbelt","version":"4.10.18-test.1574286480959","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"102c313ead3962aa54a99d4f4ec29e70707e1b7f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n* ... **and so much more**\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\n#### Where to Start\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n<details>\n<summary>\n<b>Or page through the list of our most useful utilities</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                  |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.18-test.1574286480959","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GMZ5ZmNO2Iyg1ViJG5eBogfxX+8wY0tllsJaJO+g3BmQOczOdCZPlDKWhIBSbeWbmZI7YpbF0/KR0Z0daNp9bg==","shasum":"44259c7c983010f36a6e69f5819569d554519504","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.18-test.1574286480959.tgz","fileCount":6,"unpackedSize":281079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1bSiCRA9TVsSAnZWagAA/nEP/Agab1joIYgokE9QmPcn\n3s2LE1uCTf2hqio4CooaRcVrE8oUJoXJgkn/6F22P1sMrw72hlT6YC/oKeRj\no9ObzOA2eIa+tQZ+LPCQkjG6oPT5E3fOp4pOe4PHe+epvmqa2SQUOCIXr0O5\nW0sXNOYSrfV2ctxetGyGtj2Q+WetrP6B81+PS9HB8hJ3xu2VvqIE61V+kHFu\n27DLFucActs6XYGAe1bdJ8l1ciRhX/F1511YNkZaFS8Zpdkb1xdiG26NcYP7\nan8fO7uetRYFRGXqqBSAkgxrOuDKQGKJNXrN5EHEdKj+cRd/08WKLKkL9AYB\nTVG9ihZqJJlc4VBsUl8kn7CqkHPKM5zPd9st7dWobPM5YKaAn73bwC9+GQKN\nXip/xMwZCWd1uBRmjQcBDrPn4BjHzaNDeUB8SzoqCdsusIkHhOfaNp9UmqXm\n8yFlr6AcfDMCdDiwePdlDX3T4oLOvFaGlkDWTiBBL0CNMuNdRaUu2+qT4pTe\n1idGd+OLphtY+zL3Px7/Rz7kBMbRJvZ/PbOOGArMNhjGtxQe0GBvgjci/kf8\nJH+p7emcNjG3Rf5I6oiPOpfplV380aWVzckIvQ0OAM1unVVF/oZj70KH9orn\nMKhaln9EVn1icMnpICpMXzfRuyL12U7i2agX4vOTYY7ZWpJSJBlRMTJ7foFs\nD+hf\r\n=J1+U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCa5wq7H96KTmTQYCMdwaQHhnOOX8G473N54I2Uyb3ZYQIgEGsgRPSVIaQR7tfDJJjTaran0Wrx1BcJ3MjB0IMEWIQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.18-test.1574286480959_1574286497760_0.18638622777666436"},"_hasShrinkwrap":false},"4.10.17":{"name":"ts-toolbelt","version":"4.10.17","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3f447ad2a010acbe9ee6915f06ea9815d9b60a7d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.17","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-OQbxsyTeCJy7REJBeBbS2//aR/q8KGOgbCltQ+QmvPEaE9HmtKJgqn+B+Rlx9Lfmc0DDA0ZYSrxg5t2JY/bThQ==","shasum":"80bdee7d57194b631b5f7b1d596359ecfae0b46b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.17.tgz","fileCount":6,"unpackedSize":280851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1bS9CRA9TVsSAnZWagAADusP/3EIUEnGodDJmmgnjy4K\nRfMN1XfY5ntXF60bF6QZbcsfWRDz8SZVJeS55hup3cdvs9DJdWJsmHu/+lRm\n0EkVXVTIuBdF29lbNdLObM1iKGRlhY80wiYwxlih4FFWE+f0BL2ayTgF35RJ\njaMeeAzxFGthvWuPka7REwZ5gnBhchRcJihx/3f+jtoqz6WjN7y9bYqPGWFV\nHcp7riwVs8SHNuHyDpN9T4deO5elTdkajGn+esO19lG+SELtnbkCXSWGFuIp\nIQ+vAZVMSge0R1E5iiU70TDsgckhRGGYCnqKtWfMsQ6w3furDgGXgakFNu66\n6/sbdwdHYPoJhU2BCcPPFyfl+LWP4A2LD5VUlQEIvMR2k8nULkD+uFLVH9ao\nDI5A5luGXQdvKORs/PeVP8zLQ8ADm7zg2isY2UxDOwxCY9no0fAICvANtBP7\nuNqyf5w3GbZpTo+jd3LDN8Cu6E11gaNCLqfrq5Iug53y9DWFO8L/IV1GDZ9W\n3alTg7BgXpg3b63Tk1MPnJyKSiIBpvB/LZYtjhY2iXHJcTpdDi2Sf9ivWcU/\ntIUhl6Fi3W09icJ/v+16HwY1WeDdbnYa5zsQFrKY5VuZP+thCo+txk8HyqzU\nrgU0vYmQ1+sAGn8u2zJRnKyu97MX2LrGKpKTo0iEM+ilOmtv7u+Leu8rz3nY\n1qBp\r\n=Aul+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIARws4uJSITnztBI/wSRDq1VccnYF4kdEnG9FmmEPFKzAiEAklyxJHrrKxCtKdX/goPaoL82YvjVCJYPsMmPqNyancM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.17_1574286524695_0.5212891665650239"},"_hasShrinkwrap":false},"4.10.18":{"name":"ts-toolbelt","version":"4.10.18","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"102c313ead3962aa54a99d4f4ec29e70707e1b7f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.18","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qbNGaYr1FOWvQEGYO1ik8MvFIX2qnwroo479A+0qvamg1wKVm/8/w4b2Cbivvib+ylU8TOe99Eb344jIPNjDrg==","shasum":"8c675ce81b3863f1df7a51217128612a681408d2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.18.tgz","fileCount":6,"unpackedSize":281060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1bWRCRA9TVsSAnZWagAAyH0QAKDQkwD7XuUnW5kdwnjK\nGSHJAHjNo5WUiYjtnKVPrnwjNRAWA+WqLBssxZYRqL2YAHfobqA/jGavZWO+\nEWwMU4CKt/2gS71kF1/DVABahVKyZvZAW7vy5AH8cxNZz+SzNUqD0W3FJOCD\nZxlO4pvyQZ3MvO669vH/KFRR8YClnA5exVt7kB7GRhMi5KCm6aOHdodfKVx0\nSkrY47vHxsTytb4ZsDZMeje5GkEEcwCFMLeM97yvJPK1pmxijDg1HU/6UAfT\nPJ4W0E96tP0KwtcMND1x503EvRELQ3cXNTmw+/oOaHTMn7R9uMfBcsQ01EUb\nSBMeZ7Cn8d7cejkElcaK6fJrjZ2Ofh4yolaUzNMiZgbi1IBXONzkJ/n4iCZO\nHtgpnF5BqkFUdtpg4lRQ75IBZwYSA/CLvmOlWTCOg1S+pEXypCMpxBpaRDTV\n9vdo7XF+nfy9d1niadiBlgFsjxj37ovcQcQRk4n57R8wQPcV6wg0cV369Sfh\nwDY4eSaTr4WllUhs1QPSXwVNToxY4tR3Pd/eU9QRv6XDsoLhE4dCgzHt0QNA\ngUMBM8+s5A9roXy3fMks7HSpkhAnce4gpgu8S4ZMqa9Z16CtlZOy2llFbpxR\n2PLi4weB8ftyCKgL5DbbKkyAzBkgHh+gGMOmi6ENesl3q00z40ZqcTBe8hh6\nkyxW\r\n=pngZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHIYNOr9+GsyASC6YtGqdJSUt4b2xCo0I9Yho5ZAcs9FAiEA8h72gO3WT6x2cM2yPON87g+ykJyCj5a2rRPQqVQfEl4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.18_1574286737456_0.28823153677291136"},"_hasShrinkwrap":false},"4.10.19-test.1574287826007":{"name":"ts-toolbelt","version":"4.10.19-test.1574287826007","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"774b69e3507b9392fc20be616bdb67907eb360a5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n#### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                  |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n#### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n#### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n#### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n#### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n#### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n#### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n#### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n#### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n#### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n#### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n#### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n#### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.19-test.1574287826007","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0W+psZtMq7dOyoUWCCz6wbzNpN/YjrR9Z1uaWXC0+466Mtj1tanlFNbaJ475S8JzniTErewDTiX/ZVkB2AR/lg==","shasum":"5c3b477177943913f21f9c993ca14f87a59c8353","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.19-test.1574287826007.tgz","fileCount":6,"unpackedSize":281216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1bniCRA9TVsSAnZWagAAnygP/iL1gad5ql9oXJjv1yEO\n+cO6N1oiwhhOiwXFIH2CXze1Uhzt+VzRJp7kySfxvaQ+6FLeeIXy8MjcwXjr\nkCQXx+BktLrlBl9VCBHW01zlT6nAsLawfk6M0+HyjGLQPNg3CaCmzcu2afDA\nzxxaOJMS7TzwEHtq0tv/YPyf27m047qHo7xFcrOSx/0ZoOVjQCw7GB0nH2UB\n+JYo9YiiAHgXNwnXJUtVIcS5mXB3PaJzwZ2mQJn3IVTltFLLVxMBig1k2055\nWRy00esnjmFmZyJTYSMAKGk4+0DtqPtvYHSD5l8JpnKe05nGCmvsp+F9Qi9z\nj9ADrlNqGtXyPecmeNWo+Tq5RwMT6h2Ou5b/xYazFxVP/MJjiLeAkqn32IRu\n3C1hkyPB9y1o/LMNsEKexKj1jOCV3o/AxD1InDD4i7lIlhVjt9cco+oOfyp0\n3Z+dE62Qii7JCvTlDn8DGFhd58N70BDGVDMQzyGOBOhj3V0kmt4rYZSGDWpo\nRoAkVH5FOt1+ZDPSHGapeKWjIHhiR88TZuurBfdtB2Vs2MxflbMHLWqCn2OR\nl03ZDYpvT4eU6HCfo3s6o83U785XNs+5G5g+8+p8XUlupeyIbUAzasbNlZyU\nkmPTm2lgSHt0zvwofcwMeCvczzTewV4Ui3py60pgRVDYx5oR9RsmkfQ70CIZ\nus5B\r\n=9CNf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHNQBIr3j4qHKf+nqlG6ssba/Bq6lt6JM4MQWFiVp3f4AiAthIejuKRt/uBi7/e7ojqzYj5pe8N1RsIPe/EHU8wKvA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.19-test.1574287826007_1574287841658_0.8743759943931662"},"_hasShrinkwrap":false},"4.10.19":{"name":"ts-toolbelt","version":"4.10.19","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"774b69e3507b9392fc20be616bdb67907eb360a5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.19","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Pvfs4DtxDjABtDCXtZRsSSsLRMs1zt/T2lptonjbW3JXIZ3hRPuosDefgSbQkpfOAigMzqPQIz95wNXkzR7urA==","shasum":"cb8e54b2b88d0b332bd1d86e294307fae8c78d4a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.19.tgz","fileCount":6,"unpackedSize":281197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1brDCRA9TVsSAnZWagAAajIQAIu2BDnjg5YjQWqeZlMJ\nDjr6MI3v7J8SJ+kfTTbbjoO62ccjhL9DftSTwZdBHmtg7meQNgUNCCmrzJag\nmiKUjQ5ytxtDAgcEfkZfi+LjLku8LsoYCFRKjz8RroK2wPTGLQ69I9QyKMWk\nkmwdOoMLMmhpM88CLw9idVSoOtSbW5eme+Gtg8QiARsfTbdizGwSbEImHQrN\nVp1XlRjO8KzVx5JkyV94mI93Bux3PjkNTYVqetTPUrceCS0f99bXOAmlbJuJ\ntRc0N/c/1ZqYPX+zZJ97ualGSHCVFmIpJVaXZqFRDNpBfADIT7ht5xXL09sW\nTBC2k58kEfYPdylO3rhTZjPuORd96DtaBpuYpO9hzHZZiKvYld8JKd9bE7Gs\n/76jOgnhKxKDg1PyzxaAuwUsb87l/yqwphaUskeLFg2/IqMpYhJpiSpAek36\nbs4WN6CfHdXVYxsljFFX5B3egMOGk2Gls695ShEthHa40g/Tt8wh2oiv2d54\nteju0qFDPbYASZeU906RcP/Fns8Lww1IkYKQFiCWqbjZP79kwxxwJ23PqSmi\njcokPhXS3MdrVjVyvwMQnnqwWeUl6LjYkxvqVzZh4acrM5QA3i1DZMhpdigw\nY9wGRyQ14AlE9QBXkXNQESypWEBaFzZ2gIouYQxDnzLN1Q1z/rA9fk+mR+s7\nT7rb\r\n=ZMkw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG1l3e/1B+TSVoy5DSxc86rzuWKUNQh336r95UeOgYnlAiEAn4ocZmOYpsHVmmocHBV/wEaafRoU3mn9m9PxobmTEmY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.19_1574288067128_0.5041264641888039"},"_hasShrinkwrap":false},"4.10.20-test.1574289135740":{"name":"ts-toolbelt","version":"4.10.20-test.1574289135740","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d53636794bc1868ad52e480c27877fca84093128","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                  |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.20-test.1574289135740","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-PkYFhebS8E/q+X7ru4QlplHlqg8ohz/cyY8Aq1ZHBYeG5RRJLGTbqmLTKRW/JFQcWdMfTspZfXFXAxSP8NltGw==","shasum":"878fe9e6b45a7dc707e474b7958317a40d4b9c58","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.20-test.1574289135740.tgz","fileCount":6,"unpackedSize":281424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1b7+CRA9TVsSAnZWagAAz8cP/RYGxAYt2H4XRE7mIEsD\n03944192ispmIippeDZ3Nzi/K5cfLxHw4851UQdZOqG2vX3zXhMiRswtddER\noqwnK8kAXD2T14OhNX3ixw5os2niN7Nzq0Yj6Z0VmbVeI2PzQ2Iil5tXT5JI\neIfmdE0RqpFfyUue/evsjk+zhVbVqyOwS+oc3NAKe9GFAi9jzY3XRzTZjC0J\nW5Kfrc8xOau7MkNtN2X5sDu3TXt+szEZl93l0JOWpmWMVDyO2tLeSAOtMg/G\nGZoLISSLXoCqoaYtpUa6aGEThRPByQX2wR2rDkf8V+g6znn+mqAgu0my5T3q\nHIKcq9X02SAzkWA0jwkFmUDd2JdpwN9UCHBfmpFiY7orRHOlNZhZKxkiyXqq\nNErLlo9xFdxtGL0uxb3vu8F+nsQvKyMX24hR6vA1bVhVNiwMlSN8YkhH1k8X\n+9ztf4BJrRNedG1Xk0keeoIMeMAs+uZai8WLUz/ra0mBGeRm/5UCIJTLHLZP\nUFIhjbN7ouPyTlt3SoBBbJtmjFfbpf8KL15TATDC3FUgxd8CEiN+MF0Yk/b1\nQQ5DSj7TLYSyiriylGWCyJz2o6/ofwyBIEAVdMF4RYNG2z0y1AK+whi30lWh\nj15Fv/rFiYD0apFskzus6rawVuHVHKZDANfoqLUkDe2gzJoRccvMW2oikQZg\nEL+v\r\n=PQAy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGu+uAEIqFysEQSFRLZH+xoBaUfhZZdVH8smajM9ZQKAIgJi3UpwDrQHJHX7PjSkZVd+erVnF4THI84P3nopUx4UI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.20-test.1574289135740_1574289150505_0.8359131187720863"},"_hasShrinkwrap":false},"4.10.20":{"name":"ts-toolbelt","version":"4.10.20","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d53636794bc1868ad52e480c27877fca84093128","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.20","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zxx+CApbwZmvkQnLpncwIGwos25C0fAXDCkA164rpYZKTAMAuOc6mi1aB6Tt9hqDQgL15r6WYmXiKxN6NFqSPQ==","shasum":"199a1cbc3976dda28a951baf938ae66da3c13e7b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.20.tgz","fileCount":6,"unpackedSize":281405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1b/RCRA9TVsSAnZWagAA1WkP/ipR3O4qM2ADgO9TjHD+\nI5mR5rfU0qnCdfhX+KYBPoxgBDreQD4QTAfE+bcdeU3eIKofDkUykrAr68M1\n7E+9Pz4OE5aomP1OyqOJZfNWLFTICvxUzX+qXKl2Dgj6BufWVfROe4RIQnk0\nBGA1osOsWcZxseCsZ2at1UR0e60jVv3LrhmTQZT5U42DFgrNqztwkMfCZZpH\nvSxkbCbT+ERLm4I2CwTnaOWGqb47LQARFNgwXTpw9lmaZpxV1M+SNLLSALqH\nKIqPMw4CgxJ2sHpLtwaq6a4/ygLCT1Rf6OLJnvdVBEqLDFTpg9DiSr+xUjR7\n+kl8CH75ulPJvQUXHa9jAvnGSNhnvPraLOEQXSEB16vl+T6Rv2VUqZOYfinx\n7FKgWeNzKvRyRLPcS31/FLVGsUbnYHhjc733lkDwC8s+BQ/eXycPZwN5GBQs\nCQvoNCsyT7Cgu7RJZHub/OKea9Q+psAldQJaEiM0lk60xEt/SdaxxfQVWCLB\nBMYVGTblho35qex2qkJ2PeL9rtwGRZ1sNmaHI6sL6emVFsrJ+EV0Gh7UpmHK\n8LxQcgZQfs2TZvJE57L8FYNw9E4Rv45Swm7ARHQJd9aOY5GTTd8WcZZGDxHa\ncsEobfkXLdO/paJ5k+LyxHB3rDLxnkXAkOQ8XJd/4+SOIGboPkbLDlSGpamy\nEc1N\r\n=xq4O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ8yDBy23EkOfW/LL9CfUhpe0SOFltKAJUHvlZrVSaxAIgEdCo9KGlz5SzpD4f1QmBW6aNj1aPowFY5ZBDURRZMZY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.20_1574289360751_0.9806726134642851"},"_hasShrinkwrap":false},"4.10.20-test.1574372373827":{"name":"ts-toolbelt","version":"4.10.20-test.1574372373827","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"bbc6d11d1d5eb5bc57e67e90010b2170efa8bbf8","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                  |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.20-test.1574372373827","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Ad2mmTOzxGuwYUZZa+yCyzU570jOLmwKYQXTZxTPd/cQdjJx3DAIrezF1gvjcRKmw/qirwCd6iy91mldmsPAOQ==","shasum":"7ecc1dc9d5ae510e8613c7877724dfd582bd8cf2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.20-test.1574372373827.tgz","fileCount":6,"unpackedSize":282099,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1wQlCRA9TVsSAnZWagAAHVAQAJ0A5QGBmVTMYwdMh9n4\na6ADlwcbmPDCF8Hgfrp/7PRXk7hw6ZUeBEfg5QwmZa5Xm2biy2sALWuE0jiz\nttrU5oBbpRj2UE17G1XtEWc0SL+wsXQZ3Lvou+H+dT96Ek3ZiOzoNXT4xSXA\nQc4HmRhGfSjAhlYK562iwXOLcBMUhmIQVUEsGxcnow3BNdj7Wf6I7BEki6OF\nQZwsvI+QXta4SrrrCKTKOfo81WMArp287kwgfee2Iglfrxl8AwQjBC3BIIA0\nIdAF2LxdmT63B1P8wxX0SNdTvOCd8dc8mDkZU4JF2N6mEpwOjx3FRbZgcgjV\n2VhruBe8YUWjK0UJx3ZsxE734hHJJ9XCJesyICn/fOEj04uOwSbnnPd2QxoU\nL/11jhOmF4+ktRbcyWcnYfKA4oPajSLtTlmKSnZKuSCASjk2WrLN53ZVlMAn\nezXC7B4d/g+bTSqTS4oP7tnGCtxJNwY1RYg37KjIXhgDZ90zI0G78DQKNMlB\nVAtGhBSwgL4s1TCb4RZCLfWSNroKFTcHMK64UEa0vCrvR/qFUBlKMcWXu+js\nng7YRiqU/GslhJDfqBodh4zF8fbclaJdCj95EeVZCParKTiNcgRMOGupWx7S\nW8dO+PJtnLGgy3bnTteDlB5NfwLhXTTcdjTIBd2m920A4TxcPkaK2yIyYArd\nZQ5n\r\n=5sgF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvYT4AkJq10VepONBGffNUiGlVQuXE3sbZDh2zlZMw/AiEAh8ph7ZBDj22ecNDHR2joOtR8Oh2jaR4cgX6/jlRG+28="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.20-test.1574372373827_1574372388750_0.5876662740329293"},"_hasShrinkwrap":false},"4.10.21-test.1574373131066":{"name":"ts-toolbelt","version":"4.10.21-test.1574373131066","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"337a5ddb20bae6119fb693d3b3ae0fffa4a93d26","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.21-test.1574373131066","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/HjXEse2NXXGQzxL6TWqHyv8GDhV4aZgYvaS2/BwhbJJk7im54uhTAb6HZwKpBULhW0cbIS9HWD+3EH+uUMK2A==","shasum":"f79f150a0c52f0b57670cde0e46fa64ea5e4adbe","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.21-test.1574373131066.tgz","fileCount":6,"unpackedSize":283991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1wcbCRA9TVsSAnZWagAAKYEP/2zycd+kJbLx8pk8I/3M\n1lCxWQwZQq2l1hlEoce5kYpnD7XAsZ2EIQ0+Kg7pm6py9P6x9STdIxzjb/xc\n6WPxCWEG4Eeg5A5w+guA+QwDqzEksvbbYj/ThEsJVQ5CKogliFnTVqudO+j4\nXL84+XjinjALrZVBMSWCEjVWCTNrfUii6pqZLh6B2tcmH1M31GaabuLFMA47\nwW/2/vIUWW9kZTbplJ0K2xo2MXAJmxXYplH3icgAhL2fP0cROeaDBMevdq24\n7cX8Xrup3g4Prpldri+TEWKaga/DluqesTmhpEwyKZyAXasijP9V5BgNqlvb\nfJ1+r05q0u7afFRF6nza67L9nAuAlN4VjUDxrTXC4PxzHxR4Hy6SxByNQk3H\nheaFMrIG3czaYhk/whQhl7M/MfKm2JgUdAld8+hMLIUFKujCA47nLlwIifXU\nxqxD3Lg0nMyLpy+h9jEvFrWHgvNQYCaD6YEz/8Fyglyy2351n8YAMaleBK58\nonxfvtDReqL2ludcgQGgxQDviHdMAXDsdFioyptNr4gAfVUnbeKFpNFVLPDr\npvz9SgHFGSZoHShR28pMl69BxtGDymJPHaE6ouWrcAUbjWpOIhwDW9jkW4qj\nPCgXfGHIiAUoS1Dpqe9yaXy8TmS9ESGCiYdd37hR/wwg3FGNQsPgi5XwgSmL\n52lI\r\n=yYBP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEUjQyUw1EdjEMPjLMNkoesR19vB1s9LWygA6oV4ggroAiB1DlPRDBHwb6JQlwKBFSjY30TV0EJGznsKpHzFcwvX+Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.21-test.1574373131066_1574373146461_0.22597509638607693"},"_hasShrinkwrap":false},"4.10.21":{"name":"ts-toolbelt","version":"4.10.21","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"337a5ddb20bae6119fb693d3b3ae0fffa4a93d26","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.10.21","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-89MjhFYWESgNoQVFZXmZL8o25cOg/7nlky2XyDEyXFMFj8SvjGPnvm1mcZSkKO+ipBHa5iforjAJ4ZScaBokUA==","shasum":"b88797c82161c9d019c1f3cf940b56540766eb6e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.10.21.tgz","fileCount":6,"unpackedSize":283972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1wf3CRA9TVsSAnZWagAA5IEP/ROAsrB3nswaRYVLkDI4\nvypQS7+94YbfIRfwTDaOXSCTeGj5MHbG0De21ZSYsseWOdFFmtjio4IUyeG9\nxAjAeRspECzib1YcE5xZQTciwLwLsICPPrtXkMbXKBHX8ethZiv6bMgMU4lq\nc4KGK+tvAXp0k5RvROSoIxUHIOGBQ4FSqFl0sKzjPCqKy4whFrW72CvgFLnA\nKZc38FY/1jgpx3TH25uIXN12mndwXIm4qCCPrUutSmT29p0ZqKtqoO+2HG/p\nFXo7JoSwxoRqwQCMEEkOW+bULZ69UIpJV2aRXMr118M1ooJwgvbwfb0psb9D\nCZzpKkdjfDFCwZvj3za53heE7njxkOREmC4XVDxp2AIg6rJ5B8z8u+WQNmoX\nA3dFbIfIGhWO6d3wm5D+LBpcSEJ7jhwTtLKLNua+fjp0NooyhoJNB7qwgBPU\nZnOF+F1YH45xGKat2XnHRRxzcWaxZmlxOx1mGtpQq+vKd5vndAf7EPmJXQzL\nY+7jwWi1TxLNrrpzDIJSvQi/zCvkiq2/Mw8o6e6w5xwBvsfR+tguyiwIoU/C\ndbbWGBzPHrrESMpnLxfYd+ETfyPx1Q+5zneL16o0tYZvcw9lTz/WTGybEhbO\nt+ZUO2ks9F/4VcwnKAEUARSLjirFqLYYKZprn89DzL4xthrgcjSnOAiQAezG\n9xeR\r\n=Vlbz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIELCX5tNH7cJ/rGiWBK99nxGF6qYOh+wee95C1E6/9qTAiBgwvzSx+IOtOd9zaGqNF3yBfPEmn5if5jklkT3uxp3SQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.10.21_1574373366691_0.6151995633796674"},"_hasShrinkwrap":false},"5.0.0-test.1574422268285":{"name":"ts-toolbelt","version":"5.0.0-test.1574422268285","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"0c26a167ff2989921be3fdd28ffae2fadd012ed7","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/JSON](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_json_.html)                  |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.7.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 5.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes or new features. Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@5.0.0-test.1574422268285","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-i54AZevbuRM0NV9zg5TVpj0jqlMuSYyU41cAEpehI943giL/Ud9FgRLqZ/BIrBrVOSouOHa4FgoIlhpnuWhFQQ==","shasum":"41b55638436771063a50e37a5e6c4549304e21f1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-5.0.0-test.1574422268285.tgz","fileCount":6,"unpackedSize":286103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd18cpCRA9TVsSAnZWagAA1OEQAIhD5j6kOxJPDFPooVla\n5tofreNI4Y3o7Yxj8L9rzt33c1BLoM63QwmbzmLaDIIhWWky5n9Ru/weCVKo\n/CJo4fJv9i44y7tvLxW0dEbW1aRSFsv/Oc8TAxSCO9F5Njfc0vZaEdfdphk4\n/KbjgpDdtMwzIu+ItJcVFk7+7b8P8VByarF3i8/FYDezDG14Dosi+E3FsLLv\nGwScU1S56Ni1V+rR2Pypqkur52aShYPFAeVCzbMIXUV9/Uesw2DZCzugTdWf\nkvACH8caPZojg7d5U7IPXFH9ghO2N9jl2wg9sg0MNBXR74d29NqW0/QeaABy\n3Z3i5z9i4NgNfofgVQXT35ZbiBNBhddPQF6vvm1Ol5l3m0AiPGOyfZikJ7XN\nMdsj49Ds8zDlamV3Fagt51Tdix7eGCDUVOH+43urvUnQd18vgozsZIkBQ4r2\niYrZqggSHoLnEWr3NzpYA9u4OwIcA/ZWi+qgSmNAr7qHj8S6Rz+W5/FbEf5s\nJG6UPMAF5x0toLvMKCQ1I3DLJPLKJgkwx4F+4kpxCDdQdbha4BK6lD9yZ/Ee\nBi61i7Sp3aFDN9xYADD8tGGdIHcgRRb8wp7CEd8XUnQWspdd5t3o6iLD62w8\nCuR8ofhIujIO8Wd/b9LZtUCj8sfr6IY5voJSx/F15tST+AMkMx8jWc4x7yy5\nx1lu\r\n=Qn/h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkI94WPjnbI+L/3CuUn7/RIt9eb62f+X9YtZcY8kJniwIgMZuD9jCSo+TiJiCFIq0gQVOfuB9EST+jYG8DZWItlFg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_5.0.0-test.1574422268285_1574422312847_0.5471890832388786"},"_hasShrinkwrap":false},"5.0.1-test.1574422334055":{"name":"ts-toolbelt","version":"5.0.1-test.1574422334055","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"72497b9ee59d2b835191805ae9dd79acee34ea1d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/JSON](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_json_.html)                  |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.7.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 5.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes or new features. Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@5.0.1-test.1574422334055","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ibXCavGDisFFa+7Ev2l8m0kPHqIARunaB3dcptAmi0bZLkgENL1BG3gVzZnt7ju8G6tbtcZYQ//YkRAl8Onl6A==","shasum":"1cf5f35ac36c4dd23dfdf6f6805bc2afa39e1f35","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-5.0.1-test.1574422334055.tgz","fileCount":6,"unpackedSize":286327,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd18dpCRA9TVsSAnZWagAAlx8P/ArifrlK3+N9MIO8R1xN\n2+1GtdhbF5LgTU+dAWVj/mYZqQydYQ6Br2NXRVnfZYJKA26FZWOo1ETHOBuv\nMAsNRZXZkblulRMAXGt6EDydADfGWrwZ/YysT/3yzEGPZm4l3eiMkng3y4ir\nIdAegOHCRLmWvzMfs6NwW1rHsyBSRyYsptHTBDI4qgXKDl3sxRw2tvyVe7TA\neCDOKk6oQCeMeovdXsMgtJahDs87o2XYDBXPIqama8Cp4DVNMt2IhMPmKsbf\nwJDvQcOe+Qp8G/dbWpB6fTXuL+0yioBhZ2Ceg8lp3oon5m1g8kNfQYIC1W0I\n7aX3n04sUvC0Vzhlvqom8pqAwpR2uMmVF6e+opDvKd+g+OuF9KDKtyGgeDU9\nNsJkM3swPf4gl1O4BdoFFu/99UezgmNa7kcQZSJJRzSdeZUYxtzBF/kBtXYV\nM2zHgAPY/MNtW+aoU2uasoGOeCXVibBolXsFJXdSFL6wWSr345cd3DArf9RG\n2q+6E3jI6DIGG1CkvqaJIaR9fMK3ULNWn1X8cvXsQlPuHsZxXwehodrNkDwS\nUS79oFs0g7ZeMczdx4JRdwf7lxWD0NmcZVO3mj5pCVanLCFl7GOHmL6S4ZZ3\nMITbQ/NwmpLIYnwSHke7cLZX6GO7GE7IvD7d3a+0zmBbExfWM9SfBQX59IP3\n1oeV\r\n=nr7U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDF6OiwfzIbM+lvo73DVO0fjqJ0sXDTl86pjdej/HIVwAiEA5oA3QTElSnzDnT2GjPw2waGKBwR1BqdsjMHKDndmYi8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_5.0.1-test.1574422334055_1574422377293_0.9189679159573716"},"_hasShrinkwrap":false},"5.0.2-test.1574595380311":{"name":"ts-toolbelt","version":"5.0.2-test.1574595380311","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"61a3cf35a9d545013abc98405f514d063bfceb67","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/JSON](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_json_.html)                  |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.7.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 5.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes or new features. Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@5.0.2-test.1574595380311","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5aad23ao6sWhdslFOmz/EUgy4mDoaLyPgW9fOE1hgHczmPeHfGssSL2wqdYx/kskQXyqoPp57UFKbPag9DzzFQ==","shasum":"e0b9de1572e91b188150a06fefeee32f5d6bff70","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-5.0.2-test.1574595380311.tgz","fileCount":6,"unpackedSize":286543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd2mtWCRA9TVsSAnZWagAAR9YP/0pkUUr0l+AP1PRWCJzT\nDJCqQEca0S0k+mpsVIYoCG2LFrCZ+Dw7aW2gqBujjmvSbR+HVDWYIRb/NmX4\n6zu27mQ6OWxRHLJDNCjeB2bgdqKj2r3TxZVVgb7fxvAi+Oh4tcJba1gGDc0i\nP577sCVRDkQgg0jSYbn6mwxju1j68q0t9X9AA+2rrbZJwy0V5ESweKXs/kmS\nGBjfM++mg+Q2Zyz6x+yz9OzHUhtH7/h2WTMM6CGSWlSkTkA/yrOHD+RwGcQr\n9pWPaUIkKfo+/72EtfDKW8rgZNsx3pCGFxrUN165Mk9BrTcNfnP3dMc6M5eW\nAuau1QsQ5aDdE11AlptNvB6FV1e974pu2pB9KQF4oA9aKZxLFyRhU2KndIX1\n2pLn0G65dGYi1URHFSikVxJZk+CgqsmB2W3KMGSkZgSWKQMTUpOPtmFRhFT6\nai327jbxrh6xxd3jNH0wKamnvLBiXjygG4CsoJy8O5tQQt8O2s2mw0XcIq15\nwzyLky1QQ1y3w2ZE8X9ywI7e3iuVulqSqRN5YlD0Pb7vCSl3wb+xFHn6qEOb\nXNt8wFevPyhSwtmYNFStBuY5FucwYdIuzWzeQTwu102mwWCzkgyAPTWhlunA\n2o9wf7FMy+3K+kuKWtSAkps/G54oJkASZt3YE6Ew+JEOo5dnUgdQm/6L1hAW\nDa00\r\n=pN0N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEolSLugQnnkWfqM6dCyuqdaiPS6TgHVjH+GSz+2utnDAiEAoGkZBbayB2tVrNHkHkg5UwF/DUPjFmxlymtvz54boMI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_5.0.2-test.1574595380311_1574595413601_0.959276968176036"},"_hasShrinkwrap":false},"4.11.0-test.1575065646270":{"name":"ts-toolbelt","version":"4.11.0-test.1575065646270","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"e18da332bd1e6bc29d5f6ca9bc6ed1d3acbff761","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.11.0-test.1575065646270","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Z3Ia1C6pBzKdE0gnOx9e5KBvzCvHXLy3iHBicPnf7Tzbg7DiOT/MGSZrZf0B/NOqkrmNsSXsIdXxU5dfmPq5BA==","shasum":"6c5085378e142ceebe9984f22365c61adc1834f2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.11.0-test.1575065646270.tgz","fileCount":6,"unpackedSize":286695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4Zg+CRA9TVsSAnZWagAAJLMP/2HW44oA2fodSO2FcPIl\n2sA84bKPnNw09FER20shOeyG+PgwztWQ66R2leaBNFBD+a4Lm2NuabeCPBzE\n58aNlgGB9tpxOFoC3gOXPShamwdSs1uFJcfZht/IUmtVv8UZvsqojA0nz1oD\nJCGCl58hy3xYFNhs6gvFh3jPRHJho8mtjc6VWmrxos/8TgI+zp4vhY9sCT3Y\n0oezQmmtb46nVymwhxN6wDktGTCkQAzgiy6n/D4AtVmhSjcpErMbK1dAuSuT\n2NwOGn3kvlGcJZnqBVFF3kueQctYyLndnBTLXj93NplSrr57k2WX1AWg8xKO\nBeDywmHe9aOzvF0zYOZ3w/NgYqfpDOgSYStAn3BfCLnmEQl5TyaXNS/48Jpx\npqP2bdhejcthyWJ18+gV9JMdyQ0Vx1nSLbiMVK5buWnRtIc/3zwPdW3r3NW/\ndE/rhWrrCVKRayJbOgFM1XkOSDvhVZvMxnpcfv9TLNce9FUBPkSj7gadyj8p\nOdpYHL0zkfi2mqgslV3cbEuj3rYxgr2ucZzzSrMmPwuPQq2dW2IGxSGGryzK\nKEg5pkEgB9F+chY8vTwAU/GYS6xf8gGdlBfLbipBz9Yo0jMYrUdrqjmG3Khs\nPiBMvyrAYev86K6hAKaB2GKCdykuKVhU+5GHMh2S4fkT9STGz3j+R6D75c6i\n4gBV\r\n=SjRV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXKsrWENgu6fLY31Se6+Sj+zEGDa+1Dy+/B3MRL1zqzwIgIyvgXXOUmiaS3RH4k7LbyprXrMAGhXVq35GtKsJ0so8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.11.0-test.1575065646270_1575065662162_0.5778795466927216"},"_hasShrinkwrap":false},"4.11.0":{"name":"ts-toolbelt","version":"4.11.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"e18da332bd1e6bc29d5f6ca9bc6ed1d3acbff761","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.11.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xdgsrmY0e+UD2sxKUYZQPauxun2VoK6S6zIykm46AGSfCRJcUSAbzGKsVRwyiN/yGD1VYOYVlDgS9QRvPcRtqg==","shasum":"0e0774c19d3060f832ed237fdf63e48764c9d599","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.11.0.tgz","fileCount":6,"unpackedSize":286676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4ZkSCRA9TVsSAnZWagAAC6UP+wWhjIcXRy/CdB3Cb76r\nnlm603pZfCdeWWR9QvvY6dPMclVgWmBc4joecbL4M7/X/m+JOaGkEnRZFK1M\nnVkGIGLi1JLR23wVuzn85kuZdIddp8jr6QyaP5I0176IL8m8Sep7nflNMYjw\nHscepCfrwKQxWoN3OCSrxWJz/QtPbRG0tptToa7nUkoQPReUBa94RRfj9/UF\ng5JLEcMMrnB86XxAZ9NTW+FrjafWtZG41S1gqpYyMaIM+aFu2uaFJtqVxp5E\nbXdtSUTbdOhhWgDg1kIkhP6yH/HZ6l54BGfy2kyAdndzZfpZlfzLVfMdWTO3\nDO0zlZAoPIiZ8Fdmr1DZaXMoia6qnnY9xX8HVKkhqgEl4X5LPETx/9+UOEkW\nizadYM1GElKlId980yUtnivBs60oZSSGm2SnOFm5nhX93NEZTVv+YkoMwzrW\nwmEHx0/ZwREQ44H5cGocsynj9htJTKjAJLosBStem/IzUxWmZh2uEzTAAW7K\nl2x9ws+Lb94vwXLo2DobsLNkY+H9NwHMcR3YB62gbsK4oJFOP6lI+CyeQR6Z\nLSuxJ20JVKiI5ER8RHCxf6Il8X5cjGKqS22sCRDVirAIehhox0Clxr4V5zi5\nFXjBH+4Fz/ByABYmkTZc4izRVpXMgWG0+UHFRJB5gPf+dwCe4L1i52xQcf6d\nfrvW\r\n=kEdg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYQgskV1r+JuH4Pa6znmnbkLf6/QVmYWdF3wBG2hudxAiA0KkJVJIqYLYmqUsdL3TUWYcMB9BU12u/6F5/sBc00gQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.11.0_1575065873454_0.8136859722211145"},"_hasShrinkwrap":false},"4.12.0-test.1575069114775":{"name":"ts-toolbelt","version":"4.12.0-test.1575069114775","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"587f55375fc85793b9d368b5ad640d7d9c9befb9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.0-test.1575069114775","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-arU0r4CKdietu7jJ927AKFqoQD+o0bFu1eKQ1HuEfeqKTu3qDMWIDA/vyAYsv+vgh0VRmgDFxnQqt9x6nJtwXw==","shasum":"75f705acef8c1f48c91460de799aafe8f1919d0a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.0-test.1575069114775.tgz","fileCount":6,"unpackedSize":286930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4aXKCRA9TVsSAnZWagAAuxAP/ilFHRNZsJDssmxFzpKT\nBx7jUjCEjCnYBisKec4Mht9P+GuqLoGdZ18U6GlKe8P9sYSDzrw8c6DSzFYf\nATLzKK2NEM0ZEavE2w61irBh+6RdSkah9uuIbyE5+X3abJ/kY3O4n3/krEZI\nUmc6uE+0PSS7hroriPa+G7OLNjs6vt/oER6mr+XN//k6l7I2zdK2uydC226l\nFFkBocCTz5WjyaqZkNKfRdZDyTxkFKGgpZvIhx6vtUK/2WThfjsqNr9AlY2j\nFbjJJFGsu2F/bp90xz4hfFsHCrea/A3IpsuETA0nr6TUu8hjVuQwR5rSjg4i\nmi6lEiCgcXSCQdf4CSJ4cbA+DuTixziOQ6Es6VcID3i7y4qjqcas77w34ZnH\nHKkeMhyTIbDaxO5WDl59i1UC4rCSATxSDJPuXGJcF26q3CN6OiXtWuB17eDI\nL3tKDydczSi10uX7YdGlCE3PUMK9Xmxn73ayMeArlISvewMHxd/Q7FuAGv+D\nlECCSHQc4TunVXYKvmMJ+iXmPnmCbnDeoMRK7Y2WDAagis2H0v31T+OL+XFu\nBy8XPYmcsJ218O0M4H6KG8PUWQw6MHmggF1BhE+KfLTMGcJAPm+7NL/Gma4S\nBw93Isd5uliEHOLdDgJw8DKkRdY/+NVhP8UomTwaedCLlL994eJosaO70IeJ\npWNm\r\n=B9Oq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHr4V28Tkyv26axhgR6UaynD89lju7uartHr9RGhp9b7AiEAoN2wx5mcYgR310x69GvyLJ5oATZelWkimLx2Q08zLUU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.0-test.1575069114775_1575069129706_0.12524915110938162"},"_hasShrinkwrap":false},"4.12.0":{"name":"ts-toolbelt","version":"4.12.0","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"587f55375fc85793b9d368b5ad640d7d9c9befb9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-4MeCUgCsRjiIDm7DXh9TJOGvqdYQfkAxhJrdvW13uchmTylmYjwwhRk9sq4m5h+9CA/djI01QrA11ZsWgVYkPA==","shasum":"33e13800407b40cd2bfb6f8fa2103d189e71b9c0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.0.tgz","fileCount":6,"unpackedSize":286911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4aaXCRA9TVsSAnZWagAAEiIP/3kmot/odJTCUP8vBNEb\niWvz01iGYZgF0RV3OBdP71TPi5X9ybFj+QNJYW0VPD/1y0T59oQzTQDa3Z6l\n1UVMBjeAr4ulB+aFNRovupp6GMw0v4Gr0JfLseB7AN6fd+Gl5K0qnNrl7cZm\n8s59kv9zI/52LVGNBGkgGKh2i+mag2huQd1fUXSqYTKtLlWZpFlZbQTda3dF\nUGusAXXBvtPiOzWDmUQ4aN4uns+9etS5wyFSjWBW1XJnm1F2tjQUSDw+wsKW\ncx52PTBZmhs4kLgcwwUvv+XQcbVEwngf9xkwGhKgHJIgHUlZfhtx3rQarJZ0\nMNKy5iYbhEVrneM09drM8CCHt1xVNZaIr0/JDS+GHSteluIjFda8r1Pn5ENp\nwCJ17j5nN1k5kAFZgoHnlemmOUd4c56BbKBmuKa1EgdwiFCc0tP5/hvmTMhv\nt4nNN25O1eMPS5gkwaeb1+8AedadqHdylwHCzgjhWqYyFIUgLxPdICUBs/m1\nxVCu1XUE/2hjKjRuhxlheO7N8PNU3rHqy9RZsvs1+QF663Gf5oAnntbSQtXA\nhpBsSm0UMMo/+46Ktg+ZKSbKEtWUEXRSDWhZBvZ0t2WVVdGXkmrxxCmtKiPH\nsElKEipIA8Vyz8uSQTlvnrcq4GTfn0rnFpRLfGUSCSDD4R2MQ6D+P1MhxFSo\nqbqs\r\n=Rdw2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGG71fYyKB99EOIOlpilKovZJ0cetFWW3nt0jD5UK0d4AiB5keHcT1jM4HJ4P0Ar1A/3FkawKApNovX59EMQa2mAVg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.0_1575069334655_0.6405938387709122"},"_hasShrinkwrap":false},"4.12.1-test.1575108600748":{"name":"ts-toolbelt","version":"4.12.1-test.1575108600748","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"33490c734e130d450f0a29a5361ab3f7e40a5aab","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.1-test.1575108600748","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xaRsk/d/100Zze9qzt6hCqEEFRNO2giNyAqWseAYRNUDH/jCUPtBDpun5FMoyTD/gicNRsklBIhPGh10OCXs7g==","shasum":"70ad9c6c29c6f518e877988fe78d352c14355445","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.1-test.1575108600748.tgz","fileCount":6,"unpackedSize":288256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4kAICRA9TVsSAnZWagAAA9EP/3OHqGulZnCvmDlfbBA5\nDxs7QfgD9cck7aubwJXycNklRY1ofpvOI5cchb9enAw+C4uOUhZEncK7/xla\nNHv7iVPzsvKc7YgWW8xRxS7MzOUTTt9huvA2jdThDd3ZBiP7uc4w3TDFrvI4\nNpc8RoeFfD8RoxNuain8QVcX4UUW58TmWHJ3ojSWtHYGiXH9rzd1OcO7V5P0\nRK0CSWRHXmO6gXHHvpGX7Y8v2KI+vmAcd18MObYWhT5c9GALgkChZffW8BjZ\nRlhuQwwuf0Dc3EfIQ0g4o5vosoPTAUEVnO3Ib0P5HfOIaXXutopSswvmGI12\n2BjLtMx/OL78WGuT/RXppZwwtOVTODe8dULFID/jHwDU6iWjq8t24BvyQcHv\n+Vn5JvOfRqwd//6EqS01tbuuuv8TfQTYNTB5zUSNlNEz4ptw1CWc+hEoLBuT\n21ZR8yjeVJDO18vxIQ6QQr872HPrMnsSHJYhfYgJPqxHn6Iw2cPjBU5FCoos\nFFOWMnKqU6L2Xo9IxBWz2Pc941xvZ91FEK1Tled0ngvaB/5J2phwe2GQxeW8\nzPPj9K9mDAsp7ZUGEH7aXykxD05310Bm0/NOjsjdoTriMliEkFuYBaov/DR5\n7z3g4/BeffeWRdT5eP4f2RS1wAzg6JSy4EeXXacPiKXmZcDYc7P3r671jFof\n9yiX\r\n=t5d4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8SNM7NVuuj02BLGih8Faaib1H/Qve85Ii+45KlFZrGQIgLuiCJbv33ItfJveg21ecvimk+u9elNwqXc3yeysexuk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.1-test.1575108600748_1575108615948_0.7376511480881003"},"_hasShrinkwrap":false},"4.12.1":{"name":"ts-toolbelt","version":"4.12.1","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"33490c734e130d450f0a29a5361ab3f7e40a5aab","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-G5xnHGSdhxS0kBUXwE2peBIZZJmql4MgVK5T6T4qa+cv/8dQY1TwydzNpXJ+4KUqfA8WDcwr7Hc/WimWfL0/Xg==","shasum":"41ddf088339d1b4b0609b2dac73f88e129c1fbe9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.1.tgz","fileCount":6,"unpackedSize":288237,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4kDUCRA9TVsSAnZWagAAUdwP/iBPV8kSjahvxsnCNXrR\ng/3R+cKE+1sdA9ii8/SKvMEA071NbM/wImKEs4oMPe0Vl4X3u7LNlnGt7teV\n67qXajOFY12DpfXbz1h46C2dd79Y/ZtDB/H8DJPyyW7UHolRPL4dzVqfiqIm\nOk8K2zJEaAizw3Xmk/3gusCoSbWxAMO7bZieSMR3vwAcHuY0w6QDKqWrEeMD\nlRUR3xt7pgqoUZ0cd0I7mTRqUXD/G/PGi3FydIwFF/WDJgee0xGME8ocEL41\ntyqmjALI2bwFwT5IelSkARD9kA4Rjb4ZuWkCXzj0OunH+gwnng/0n8MBdqAZ\n2eKZx7OMChvUB9QA/TfS5UleG3auHMKYiV+4v7zztfw1R0cREe0Y+mvefUaJ\na4iCaEbLAhs5p5JV8yzgD4Y6fq6qu0nUIVoZ+DlLOKPoagcz2NHERc00Lo/C\ndOT+Jn01LFdx7wh8NqjlbtGCfWNSsj9bvPO6K0gFq95Nlo6W6S9yDuUliio/\nu3OyEm0E8POTz5RUE8PS+ft81srHeerqUo3IfS5QxebrZupNht1cRC8yMoum\nccH1ZNgxx4EiB00MswRIGSj4h7mHJMGkpedPBQJo4HyaTc54TG++9+vphkcU\nJltPPFw+5vo0yhPkErQTnh3StNGBxP2k7Dx4di1wQXkiTMKF6Z03gt+5aVA1\np91q\r\n=zaCg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAo6XmJaaV18ojnPh95S8w5e1qC/d+GUwue3Y2TxEGHwAiBISuDOEQXObFLUz7SUeVZsLdBYNU10v6Su5z3TV/vufg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.1_1575108820272_0.6463414892291077"},"_hasShrinkwrap":false},"4.12.1-test.1575110560592":{"name":"ts-toolbelt","version":"4.12.1-test.1575110560592","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"33490c734e130d450f0a29a5361ab3f7e40a5aab","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.1-test.1575110560592","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-i6Fns0KN5rCPdFQcE0qke1iKxmjzXZO0BcqxzewRc3asxKcDlHdhu7Kl2N02jhLtthqvRJKQ7/qt2Tle+cR4PA==","shasum":"c17d157ee33c133a79e5ad4f43640b17f4825bcb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.1-test.1575110560592.tgz","fileCount":6,"unpackedSize":288256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4kewCRA9TVsSAnZWagAAKwQQAJG33yc70B934PAk7mMG\n1xvFYaNhOfaXXrqlB2EdAU5X+cs7cFvWLFUPDNl/RtdjoALe1ntYGb0L4EJL\nRG719+za0ITUN8dsr5foWMLH/jzAuTROza6cLkdX3lWw5nrISiUrbRbajaoW\nhhzvL4rh445ULo3+aVXtjTJM6vUXMMyRedKychN91e9DzPjqpJrS4oETkD6C\nsWS0TKc1AAgMETzH2or3tTXS1y0aEbhUM2rRgNjh7+fIRm/gIHH2lHBPBiX4\n0NNNAuTKT7cCTPs5CwDyb/q+65prfStufSTO1vdRAGvA6mS9/3RYlxYtj4FJ\ncim/SqQL5ui2G6OER5HwWZ2pyNd/EHbA+OEk6tvjtOSZKh1qsHEivb2qe8Gf\n9AHnoCxQpGEhsJTqNnjAtTc03LI9R/XfuXMaKiLexZ9eoxZVXU42yQvM7gjl\nmmuq73deIMCIEE4rGhM2AMnaB4M1T7bVHWPM7k1cs2ToqcTHiFTimvdaWsAl\nRXo8A8HBNttpbpWuKt+gfH/YXehaHu+utPIfs/mlzsaXZ/P/vsjc4sdiYLH0\nYtm/nt6FGTBijmpmewkCxCGHgBAJ6iVSQCWiy/qyQ2hNAjpPw4MYOVlb10jl\nvazVRD0loXO33JuFfxvOapylRNoMAdfdPY4sgMHHZANA2vKQ2F6U6EBMzIhd\newLL\r\n=3U8b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEoiM48JpqFGsNDsT4VMLYXDvCWlTjvRsML0O9827yAxAiBkjnSb90CgJPO77P741c70jfo8FlOQiGZiWxbCzZG7GA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.1-test.1575110560592_1575110576412_0.4451927864609697"},"_hasShrinkwrap":false},"4.12.2-test.1575119490554":{"name":"ts-toolbelt","version":"4.12.2-test.1575119490554","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"7536d17ec26d80a6843aca1aa0c97d14cf7c5ae5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.2-test.1575119490554","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-HwwrBK7koIxNajow3uuW5Sc7hksnDJVJBxdKmKe8qg5h1HRGge3sxtwQsBOu03CGLlUcAjJel0ywiLgyFIrknw==","shasum":"92608a83426b1d6f258d48ab0f7ee54802332bbe","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.2-test.1575119490554.tgz","fileCount":6,"unpackedSize":288563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4mqSCRA9TVsSAnZWagAA2PsP/RYCE5L/vagg83JjyfZL\nMrH2G8VUHbli/++3WZwuxsl60M2eyKUovX/ndbEWHe8N9j2JpU85nov13nQv\nJAPSaffuRBQxzKut9kYzVXQ8hKhzF/0BfGTf116HT8iKnenXiFv7L4BzdZzW\nvJvehB47mOPP3aILl1Lajl5hU6eNkclZOHBYQTrxY6ZaCqpGO/zR8ZFV86XU\nEnT4IZzU8i90Ygt/deINdjcUd6GOsLXChBf9DnRd3E4EHrVprAE6jiYHrxxH\nHLaTpr3GGWHBW1XEUnBSzIvjVi8R0pyZrJw8H74osB5m7PuPiwmbr1T9ND2P\n8Pay4Op1f6J8qikBoV8cUd47WqryFIbMp7GvAV5oT8jD9Qvfeqoor8/iQ6fP\nejE643OWsNiihPTnttnqg/JuCv7LqiYmyZTf9m/3ReRwSc7lMR4/xWjLoRjw\n5eVLsuOdi3d33eWmothLRLoqkPwHO0NpiCSGPDz6Nl0FBeQMTrudjnixOpv1\nLmuwz021ttJzuxbFa/P3Mxvfgkvbt8stQWH1QZ/OmO6F41HgNMGY8AbmbUia\nrkRynH982sj6gon9skIHij1y06WOQhdbwnW6JoVutINGITPe10yDvSEalVqI\nneR6QXzj+j29nZD52oPPxnAQe8xDwDhmKYcPFjf/6BgB7hM1IRzSwrtDdmSp\ne6SB\r\n=DElD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGJVnQ371LZpguQgU83Km41+QyRP0muhJplM+Gdv8nEjAiAVNDfSFfkNVpnXIsAoHZOeceVfAKGX05pHq67IUZXQzQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.2-test.1575119490554_1575119505778_0.2566752985639782"},"_hasShrinkwrap":false},"4.12.2":{"name":"ts-toolbelt","version":"4.12.2","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"7536d17ec26d80a6843aca1aa0c97d14cf7c5ae5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ZmZ1+lVchbVqjYvlG6yT1PPjv95hxHaQ56+LQVvYvhvL3GflRFXC5pxXUsGwu9oLbOl6pMRQcozsTJSgWd8OwA==","shasum":"74e10ebf316829860f7d6384e7af28ae873ee54b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.2.tgz","fileCount":6,"unpackedSize":288544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4mtkCRA9TVsSAnZWagAA+QQP/2K1C/g9zFSNa2yhkyTF\n2wObUjqZX4vlJVIkToCnyeyzJ4Q6racjqdbrcDLvYpbr1iutJ/O3lHW2Df8O\nvwirUYBtbyary0BN5vWJ05nEwcNwC4JwET1KdoiIbJNHlxW6bQAZKHKlMGre\n7fRIMiovzVow+9vRwtrkhHpXO6+SCvDnLc2+rvAW6zbwUTEGZHBdHQkoLr21\nKmMbM11hXSPOjYuPwy7KEqn6sMCb+LDlZHkzV79KG4ns2ms6xzkYAqb8I0IO\nmPQryrQM+dBH/jBEon6rIDRHTXYzmlsHrmsd3dIXo1GfiKrbQzMo6rXlXodS\nmsAB1pw7thU9/9cHv2kTq1lhqVqxOHGY+ULTow4MD/1Lvj5Y2TP3I2utubTF\ndEdeJxNZSUIQ66h6i87T8lcEYxr0iLorjhc9/lO4v6naXRbr2njMi1zCZrQd\nOqTxxUikWLKhXokwPGqJNTlfHOb5EWhdeJNYuHoTGk20dulTDi/+7Fn0lgn8\nyOtUHEM5JMsWfYVOq/cOOEGlo5369SAtnGPsC9082R+IWaZSd59n7Zk57xn4\nwFF7P69LHo4n/iUXvRr1QOLz4ze3ZzNR8KCD231YP/cazLS4FSRVz/rHtRei\npriZIpnvie9FdJiZ5r3Z+GRLF9sC0sN2wREcMo68tbn8wtLEyR87JQqnMW+p\nKLQg\r\n=EN6D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiD6hzWDD4y15FLd34MGgpnboLOmZfcT3sDjU/vM8vOwIgB3X+51eg8tflNKxcOXbKxSLZ6N42lsV4K2LN9xSgxlI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.2_1575119715967_0.6850283218848323"},"_hasShrinkwrap":false},"4.12.3-test.1575131413526":{"name":"ts-toolbelt","version":"4.12.3-test.1575131413526","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"192d4c6d64dac0ad9bdd8bb8d2527e042092022d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.3-test.1575131413526","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qGMcJO6Sn8FJ6W09T4xzlpc0X4pgY8aQzoQGma4RSSwdmdssDapSztiGCbTzL0oiSsKxwb4DcB1vC77ERKx0yA==","shasum":"29bf6a0950b6fa2656b9c9d8172d3dd8c9336d72","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.3-test.1575131413526.tgz","fileCount":6,"unpackedSize":288876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4pklCRA9TVsSAnZWagAAo94P/RrO7xZmR9NY+U1fZAxz\nLG6nkb9JHXg8cdfJ8RK6axV3EDlx0bAyUOXiwdy9AZqBS29EhQiIbuz03tWv\nUWyxFwrJ8ZMZ2dFpPR4yqgHvhc/3ft5y5j6UyMgcg5QLhVMk4uyySHxy3cnc\nSPNcu9/3NisEaxlFgmgpF4aBxG+ggW4+90yHx5yZ/1ieoLYWIGo3gGXJf2qP\ngyq6mCTz41CHDMIuK+UKKNfu7E40QMwK9SGVeAsddEWT9WYuIKHBrLUFQtEL\nAjVrbjaaJGxTSVKzSD04TC4/tz1eJ//wEExz4N2XCvJecfzljt36Xm0FEhvn\nUKcwAchtzV/etyKqszjVsLp+RRkaXTb6vbNtf0bhQrGQMWWzDEE8G7071/7J\nBgw80QgjMEoPmL83MgAK85BkNRhRuzDOTygVUbYy7tiMHitPmtxSQAlFmxkp\nU0h7w41R5ruJYtBUcnHT3oeRQhwr2yaWimGYzU9+r9m5eAlouuw6k2vJ4Iu2\no0yJW4mXTNFjX1bsjoOMr+rtcnG6ibGj5MPJuFQUQ8GEDP5h8EWeEA9hQHQg\nWmKAMpqPZ3PoPKq46pYYORMhop83FE5jfIlWL1hHMoB0nPvDFjvFdMh3GZKE\nJgjHJbvJ9nV41iT7z8TM8W/mfliP8hl3w1DPkXmXMvSE7SOny2cN2TKIY3ox\n1xYi\r\n=qHKq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgQGc8GHTBrYEtxeVvPMDBT+8+7rmnfAJ3gpAqIrAICQIgSXohCvd03lIOsPLssNTc06UFe9P0rR+oEVasZbXChLc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.3-test.1575131413526_1575131428506_0.17093031888258414"},"_hasShrinkwrap":false},"4.12.3":{"name":"ts-toolbelt","version":"4.12.3","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"192d4c6d64dac0ad9bdd8bb8d2527e042092022d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-VrD9uorpM2JJPY1Df3WBz205X2G0F/RB6WYjMv963NHk3UkiwgsgwgPeCiUdQ+LZ0TmGom/btDz4Ccpaz7AuDQ==","shasum":"d1158fdb2af1e84a06d1a750f843a3b0cfe1a2ac","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.3.tgz","fileCount":6,"unpackedSize":288857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4pnzCRA9TVsSAnZWagAAYhYP/RW5cb+8eATfCkVJ7daR\n4HnuuUo2JJR14cfNigOeHyJblUca68sch9O6bflQnwbXrVy5l7BJzMGPkGPv\n9X1AceFfto40SY524zeGNvQ6Ozqat/Ky1jP1uFriQyrU0dcrCbKozFYTYGW8\nJVlkDgK7SfpOMxyKJFKsj9+aLUv15cqNf4uvayeMyMlgNXWssg+5lMVpJfIi\nhJsaT9n03FMVukxQM0HLZe1HuPKPJPKNVWLaO5ACcOn0wnR4IZvy3c9xlwea\nrPCZYTFdlY4YGWD1ImAHwRbx93EbPli4Zc7W9bvnm6EtqpMdvV3UhIPhym2/\nIULbgNmTuaCdLpdndPpnYexEHJwdobCujSrtMexZrU7MqBh50QC1z6gXttwF\npffaB/q1YrAJeXoQDPQMXt198t6wUcsQpG7cTIyWaUJBvMAaq+w0RtQwtjlJ\nlZcOY1VEcmTRsE6vqdNsYBM6MhAFzzn2LzFWdMv04KPC0PvJcWRryIPJR/Wo\nrCFKdvcdXfZABx7mbJS7YT6YpKFBHdHCVzm5lfR+U4VZP47YwOAFXnnXiTxZ\nGnYsnhaUOxD5m63uCVXOrLWy7IToqQMi81iM2QVDvf6qFWOvTHUehOmO+Jio\nBrWwUb2gQdWwlQSpDUQSy9FZbFLRsLUpBU33ffDPabNj+xFNj+aDgbT4LoG/\nd0da\r\n=jSK3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoffrJx7werDCs+E/UlJXy8eOJf/9FjeGww4EkHJ57EQIhALKhAHtIuuxeY4qCEnsKqGywhREr+xpbnwetoH0qNsfI"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.3_1575131634506_0.1924806595528712"},"_hasShrinkwrap":false},"4.12.4-test.1575132340399":{"name":"ts-toolbelt","version":"4.12.4-test.1575132340399","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"0ce4153fe18f108a5b122d8749a95802df3d7a72","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.4-test.1575132340399","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-N4IchohJ3oGPU9Ry1xZCQhKOGswYzS3qqrbsKuZtR1S8JpHHAgE9Oyhui+ueqg4Rfs9pH55rHnzgHqdoJ4WFbg==","shasum":"2463c780bee853e323ddc5e3373b94ec85ae5b6c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.4-test.1575132340399.tgz","fileCount":6,"unpackedSize":289072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4pzDCRA9TVsSAnZWagAArvYP/ArD6SoumcQRkeJ18QEe\n1GfCmIInu9r1bCPjGyVKtbqKb+dAtSRETw0p1zbpg1ejBdqcSBbxY+MKzkIC\nkN4Eg9Iv18ZubVSRAq8SELIrFmIjUvSvIG6GOfpQE086iiubpC5puSSXXJBW\ngGantSWUgC1inCDFIKru44yCAmspOWhQ1c2B/p8OzPwIhzUS2BXuH8TVmLNf\nZKsmZjYnYIl4jETifftaZIboMeX1JyA3nExNf7paUWnehsDOmAfG0BdF8gFC\nVbO4wvqKXLfaiR7pYUPJlDAIi6Gl67LeWSLsFAokXaNrhNumTmfsksZN2uUL\nDJzFEJiVro/ntd+bOjpXwKa4LGhkTgq9BY6l+HIk2nUK8BCfn+t1daCfchuv\nmYGIuY/7EDZnuYHjyDS5s6WF/ITHa/UYbAtf00+RatVnHo6kV2DNVtWQH3IE\nMFEEyW9/uax1EoJF1i1uT9Tbzu7x1rTs5keMgvjTxS8AmhWPOaeR11tZopDO\n+3KlvInZSNNyx+qnRdO7ynfhmk7+ZFrJq21TkQdGJLy01BZuBcOyejz8/1gK\nmeqX+X8QffPSoiyw/dGzvXtiSYf+MC/g/XGRumokpo/dGS9AmOFVFY90GVhU\nlB7+4ABZD0AHjbzRwFRqGo6bAPWDs5NdW8BUeIGSIZmy8Ca07OyF3xnyxIlq\naV++\r\n=qW8o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjQWP2A4EfK/SMpf1cy2l397BnmI6PMeBEcdWEt4VPbwIhAImERxXienUzkz6JW08lCFOkJ5IlwgaLF7/JoYtbRLTp"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.4-test.1575132340399_1575132355193_0.9851437417055349"},"_hasShrinkwrap":false},"4.12.4":{"name":"ts-toolbelt","version":"4.12.4","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"0ce4153fe18f108a5b122d8749a95802df3d7a72","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6GG5Mm4nZ3aLC8PVcAl3JibWhKLVlfCNGbR5jknTwBx/SCybDReQqnxKLo0AHROu236lMRjMbhz++LC7xyJ40g==","shasum":"64450d0607cda17146623b60372fe8667d965c33","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.4.tgz","fileCount":6,"unpackedSize":289053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4p2RCRA9TVsSAnZWagAAZ9oP/iZh19g2UHe5mE5d+wi/\neGUsuvjO9S7rihDSme8NhQUtsdYBcZsQX7VaILixpeV0TUSxz2TBbnrqKSRs\ntcpHjQzpl1tDjnEtCiDfu0J4xq5FIBOmiNhzFaQCXWJ7DQ3+K4Qtnkd8oFdv\nyep+qpO84vBWE/XNEOTvlnjksmx40WOiUcdb+MTp3JyrmYSs80/OrPnRb7j0\nq1/y8HoQnc6O9CSAcDasFu0VqhvHnodHpg2EYbkZB4m/kfwKYSODKTYST1Vw\nRhCeN9+wb9sCzItV4nFRYj4/ZwruiGG9Z36W96yY+FkoMMhgB+m7mQx/Xfc6\ngYHjaJKxdl+APdzgFuIWrJSkSkQE1XUflHHlD7/91320CQJ5MQPhPhWPNYGN\nvwTg+LNyOA1usxd8P+souBhZogE0r9ohq1q4HfHVvuzBE5zWOJgVRXRn5Lxn\nZ3UWgofrUO3MPqbaa+rnoIIFKe7BGrcIsV0Q5khpdswUI9k3Gqcv9IK0Jw07\nf4l4kGHVVaS7bMAni4wpK+EbPonO6xFFmGBeuTRVmVYAewl0kwHjuw7oknim\nOORDNE3PWtUifVfXy2sTfr1sB5cICiBf5HFosY0Ism/gHZ2VgzgMewZW4b0W\nTDHeQCW2N73zd/urInKr3VqJK5AOvrGJ/S4w15CfN3uObPpB5DNPjj4GCyE8\nPZsa\r\n=1EJ7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBa/tUWJh9DycM5qKTWgN9ug2zVHzeApU/kwmqf/F3SPAiEAloIDsnYbP1dVfpoun8TvaT5kFIlBLcpTiiCMyBYfyds="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.4_1575132561030_0.010201575760012904"},"_hasShrinkwrap":false},"4.12.5-test.1575142606731":{"name":"ts-toolbelt","version":"4.12.5-test.1575142606731","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"da2e0c41a6a0b89b64b717a459a6bc160ecbe567","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.5-test.1575142606731","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-i1webQBuiPH/eCQLawOKQkeaMRCsNYNq9OC+8+BePNE30YRDQa4ILLvTEC8Xgp6d83IOm5khl8NDe1boCngH4Q==","shasum":"41f51650cfc869b6bbdcd6dad13efa26bcbf3675","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.5-test.1575142606731.tgz","fileCount":6,"unpackedSize":289714,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4sTfCRA9TVsSAnZWagAAZQwP/i59gqCTzPYq1M+TX8ky\nOKV5KT0VXBDUQ6Ij0eHeBSZ406FLjQH+QIWhfG+k4yaQIcpREUQ3TptRmTzW\ndFFUtwR8O/mmH9WQfqnNbLEJgKWX/e5MzeXfPRw+mEvirqE5vFjiAG8K3gF0\nAvN39gI+vwf4eNKlWxCI1pCNR4y1Rp/u7dOdR6r2pvZ/msQwftvnK+QDHWrT\n4Ccy/SSfGRrOzgYGBMJBsN0voQwaqWgLZE4Zhc6eqeFAUmgCGNgEglEBRPJ6\n+etvoyKqwD7Up4UPt/HnHRSaa5voL0rgGaYkPxNdZBKBSTdWANGw2u9n9icM\nhWq4mlOrop7iPf0zcvneDgSKG4c4C6XRyB2qOTgZSKZ5ZnXAoVF5TjI3I+l4\nWe5pwiP04IvlAB4jkZjf2eQBWnocxANlHfpsCOEfhv+y0O6JgkOPYiBZGrn7\n0ifSvWtLpc9ayHhvhoWEH+HU727HcLbMI97exyh0gr3BEXbzMZEyEzpNj/hv\nshcc2rhM/TInN81PYolM21etTP6cBEqwKy2TfZZ1DYMEPemLEbcqsLqO7BFN\nY9s74ZUN+UOtUIS8wmGzzAW6LMjYwAVkzzd8LhZ7lVKTawm/RNHIfV571J74\nEaAAouxKiTOPDv3UjAdRqv6JmVZXxyqfJKEu36UmKpHg8fKAlNg7ZNhki0Kr\n87ny\r\n=BvvI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAPMlco95esntXMXa+75Yx8H22owkl3zaQBb9dxLBbMQIgTTN/IsUZpVfSJsahsec75+y3FCrSSUi/iBSNsJeY/Ow="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.5-test.1575142606731_1575142623214_0.6951100092033475"},"_hasShrinkwrap":false},"4.12.5":{"name":"ts-toolbelt","version":"4.12.5","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"da2e0c41a6a0b89b64b717a459a6bc160ecbe567","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-LxyONMKpDNPYtO3s63lQ7YNw93Xpsf6Krrvx/5XHT2I9YqgSZ0C+fERQKVklRgXOK+QhdDYplRvgdWPt43Eo0A==","shasum":"75c57a53127fef89af7dfb9b2e9ea7e6d7211c69","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.5.tgz","fileCount":6,"unpackedSize":289695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4sXJCRA9TVsSAnZWagAA+xkP/34bq5rlG1/wJkj6w9LH\ni4i8+03RaUW322k8fGRAbGUSt71ZqDzZ1bd72NVQKSTn/Fb0xLnfTnMjc0qd\nGGLIugp8IbccgTomDOaW0f4U4AoS483V4uQNTd+fwNxI0ObT3VnCdI8a2cSd\nO4YMvsaWDAzein1tM6hfdR79rLuBoZyfNVtOSnrOJCgiCBcVB0DXxBOPODoV\n8uSWiHyBcO/acjfl4GUnk8uAE1SD0q/HTevRICPxVDWAI0z3nDLL945r/fNH\nslvk5FFlatqmJRMXgtHcUohjXj9kiHNQZTYW8cbW1pEVC4ZN2A2/VGaVzjBi\nfvYbYQ2GNBNPqM/eO1sBoecvu9Ltpee0jCNizaLbeoQrLU0BDyd/QaZOMQ2X\nuRPjN5gMP1srztZ1Rm6rYIhxBQhELGDZXJNvjoW54qWd/Rl5HFvxzgbuyJQX\n9wQe0mnCF6bsZgJb5nsMawUAkGK8BS9NJCqdGRClqWNizOVb/geXfAMoDqpc\nxRR7jqQAlxc+lFS1XBWUV8dikL9Y2ijL2qtUP3i/Wgr4J2G3FJj4P8YXfHye\nG+J0ASquaqPEfmfRqjLFJOOghNPIz9ChL1rzhfckWQWBeWkVPgZ6mxEbQz4I\ndz5FfQCPabIQGPvW036zWR25xllo3bxpITWXtlzBbYxqo5l58XnYTw1deSrO\n6o/9\r\n=NmNL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiHuG9RQgBml+r2DTohQDEu24Mo7/EdS9igKFZDag+GwIgZC2mdPtsuGswLNb+b+IenOtcWMC26cPN4cgJv/RyugM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.5_1575142856498_0.9627596647835279"},"_hasShrinkwrap":false},"4.12.6-test.1575230905047":{"name":"ts-toolbelt","version":"4.12.6-test.1575230905047","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"726aef324e08abd41358f0f0b7eb355b5823b3d7","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.6-test.1575230905047","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-JxPKYKELN+evG6N0Kifhx7nGHSJIhqsCtt9btf6eUYkK/eAMtXfT+v8yFQznJOnHuBgztW0jrawRtN7S/yhZNQ==","shasum":"b3b7c03fcb58ab54974e21edc6f7a821e9d37027","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.6-test.1575230905047.tgz","fileCount":6,"unpackedSize":289676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5B3ICRA9TVsSAnZWagAAcVcP/3OCLvKCvN+iHPuRn7KQ\nLqnm3UQFybSouWoGRTqsvh9pSjr7UWs9KrJkmKVTpHn9nLPYrfGImrbZBxE/\n2tDkE74awLmOo0G+1sC1L1t/GoC/e2KfJ6xRz3+cfks/c8j5V55sdf5rLdZv\notAJNHXn4nlXCySAGQLzTJWyy02iUVvU+7JNdGAWrTF7j+sPS5znxmN2TsLT\n6Nhjl490gPIIcA3e+FYHA+Es1n+MWOWXA/0GIKOw8508PiSOrB6BkUFcnzJO\nSD3orBosq/rlrbG8D8X3GxteITYfRYc4gQSoywjl+38MPmfrmO5UQf9FaRbQ\no+HyZnnfUXLF3fpCjLrhZZJ2aXKiQ4hsymiyz+zDfa2s7yMYPWP9YPK2lBcQ\np6nKE8KlmkQAJ0iRpSk1Z9PdC2xYIHZPJJ5RHmRU1yA1GQuAp3HVGk1fT6Qp\nuh5Cl3xKMjryjoB5ZSRKLPsxydU6HUWO+5v4A5PkcBjK+RiHXhTDCZJ4GfT4\nYpBSWoeT1fK2fWFilXHxawpiYCHeqy9PYL8+QHWHQwryPQrwoViVXF1+RYkZ\nFeNZKksMHERNeZO5v072HMhFe/eJJP3BuEVSKXFFDWeuUU2eoL66uxLazehI\nhD7ICAwX9G/BwUzZ+gC+9ICBsBcwMg0y9tIQhfa1ncTnL3Qa2vMDJZolomfU\nBj53\r\n=RUFN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHAnDVERIkqmUMtHHBsLbD1rWU+gbGsY2qrEdjcrokPeAiBe4OuNSSMus5JR4lzULB7BiMK1OnYiKwlM8fNwVjAMBw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.6-test.1575230905047_1575230920056_0.4028834900029399"},"_hasShrinkwrap":false},"4.12.6":{"name":"ts-toolbelt","version":"4.12.6","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"726aef324e08abd41358f0f0b7eb355b5823b3d7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Q0gDyZn099xJe8F4PexjTHLLG+8q24FrH/c2glVGqBhNcgdOAzgMcXANV1LvwvZr5dUD2qL3iHdnejggTR14LQ==","shasum":"ea4f89a1ded6b1e90795859057905203319f8d1d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.6.tgz","fileCount":6,"unpackedSize":289657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5B6WCRA9TVsSAnZWagAAXcwP/3romyn0Bp8Ce4LfLpfo\nsVNQvma1ij+oSowQgLlo+NJ4zm4dIeTAMBpXJEglZmRerOEawdxZQXRIqKQv\nqTUP4SSX7gpZwPvjohdWu+2Pb9mrLgCPQPB7Fz2OYwo3K/qZBXl27cX3ViUf\nJa9rJE60HIR9VuTqLQX2maXUuk/yWZFwFbRfKACJwfGhb5S2sHBhXctd/NYF\neHzSn/dYKCiRzjEUVIG4CJxlo5ViS6YXOnERrEJdAcg8ZByHKrtE8jQEMDbJ\nmOEL5VKoJsiiKzJIshmUaICk4CpqG+t/DAAf3JvqLYPjyjz09rgsaK3PnBnf\nN77kg/evdIfGTYaDRTRp7lbYcTdapyKQfLDD/U0LX8TrAv+g7pD2Dlyuo/v+\nXx6xtJie1WebK0TQch3ZDo4iku0u8jolYX9qxGEqusgUEVK3Wie3gDP+D3U6\nXRx2mHpg6NqQQXaISJmae2zBY7mx+MBElM7/GIv5X5TOftVNFBRedHLKxA9L\n0rSF2epci/aCvLM216OPI81n2TdTPcIQU1cEI26Y3YtoeZQfy+Vjh5eAFs02\nJP608uvgNy6K+trsdWOkRgmyHp5u92C2FtmggvIaPsV5DOVPy8x5QDE6wLI3\n9Zs+kI9if+4CF+h0GOP9ccpkvopAfQ7w75mMZ93qBaiLq6OOtJVJwd0IpoBd\nMlNI\r\n=nLLE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICXLzfCvF7bwhlScqOX1hEa12Of+CGTVJxOlPE2QiM32AiEAjoyNN+UFYggPWXrlcY5Cf4phBLewJgdQBaeIaO0QB5A="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.6_1575231125778_0.6202337722916951"},"_hasShrinkwrap":false},"4.12.7-test.1575237950619":{"name":"ts-toolbelt","version":"4.12.7-test.1575237950619","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"83929dad82b2a6f3b175c93bce45490e0254166b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.7-test.1575237950619","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-b/XfVl8EF701XCgFOjsfRptmIqqz9y9At1N2M5R/4g6fbn1O4p5mmy3VcehqWFwgkjD6JhoKUYA5oojOizheKQ==","shasum":"4d0dcfeea9ff4957d4edff404b216f684d36e3f1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.7-test.1575237950619.tgz","fileCount":6,"unpackedSize":289798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5DlPCRA9TVsSAnZWagAA1bcP/AtsjYhoN5Vlv3H490cu\nKYrXTyEOMkn/P3kWt/6fbwxo6XFvcXURg8IkqWrTY3PVXcgtW0kTjGrhTQvv\nu4RtFBElZu1TO+pKz5qfHRLgfqtamOqbq17TYoMny69wRvi9ngderamFnKf1\neoUAx2+w1UP6XpFEMTnshFF1y3U67wMsnkFi8T/ClOItaonHEGeZymRcYEPD\n1fU/FjquLM87cqUYZu16zdcAyPFSm04uIUvGr+ZXA3656dkIMeuj7Fb2m9ae\noyEfswIji+eEWm9W6byvHqQSaAFmtWWlKLjaqqJ34EiL+ooKjWorMrRzH53M\nxRFLL4lYr4fpkmOTfVzvPd4qSTcmcE1weB8Pgx8wDqRe0VjxGZoax8NzR9GB\ntil2mfhqrcEaycZgtwTwd/l6D6K2tQzvfdlEEVEUN6hAnSig/07cKtg1jlMe\nbM7fQEfXQABmxvBOs7ucvcGxXZnKjyT9Ru8H06bRGkuZRnscxX5lYH9zr6PK\n2S+wx4Np2i7DOfoBJ2VJfWmnAk0xv2/JJ1Pj5DBVLxJX/QpPwjWtM6QBaNMx\n0dLVt8Phnjbtft6BysrHZ4sRroeiiGRmFNLk+M6+FT9d/5yPJKHCqpNsWdlp\n7OQI9zhDVzcChiiwpJwAfoJrCcH0YzBpnMiqFRtPoDpaUT7L/Q4yPvEVmknx\n7dTo\r\n=68K6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBC8B0aGzcHN0+uskHa335EuISHMXwNm66sU20a7f4jgIhAJRFrdnddviA28kcrTut7tx1vQ8v22exC95gNTJ3DiK2"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.7-test.1575237950619_1575237966829_0.7899261108680107"},"_hasShrinkwrap":false},"4.12.7":{"name":"ts-toolbelt","version":"4.12.7","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"83929dad82b2a6f3b175c93bce45490e0254166b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0Z1BU1Pq7JsBcIeZ91X3s8XGoA1YDy0/I4XMA30Uk3MWUsNGXX4T9KcT7ZLAV69JhxdCHcO3b1IYds806FUNag==","shasum":"8e3b3c4a29bb99e087ce7a56c2a12e2b9e1ce2c7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.7.tgz","fileCount":6,"unpackedSize":289779,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5DoiCRA9TVsSAnZWagAAaNgP/26kYlK3f5AExWnwruzt\n9Ndn1M5hjAJaL4Bo9sDow197w2fKlLiNnhY06bLV/dGX1cR9wClDDW1rY1SW\nEGuLGnOOrubbEtsxfayJydNMwuGa7by5m95azQvEyuDQqGl5gMruHDBSKn1o\naJibObq3Pw7yS7/wB9AsJAcXIe1z8aYG/Ya2FYtkR+RjGjOV+EF+J1gfCeF4\nC3gQLd0rdPFcnV5I5olXB9cWo6NQolpwwyy7dRNo4M8XGAyF5NzgO4vTUWad\n/p+T7Sv9pTe4Us4lLVuB4xu1rAMpDBntzzw8qKs8qk+c4ChhjQWoUnrvi7AU\nAa4NlZ1TU18zO3nJsyvFRgar6gvy4QVVOJqoEh0JQ4ZWtuURvWQXjXQ/F0gr\ny2VhwJsY1+rK0stom/V41qgCWATh+PVSJpbXpSN5vY9yWLPyTpqabxzrGT11\nuWqQe7+jMoDXIQYsBW0h/kFKk5DQwWR536gvuySmLukAY2j7HgX0FnUXiIL4\nNgGMfJEILbpfMgIuUx3KCx4e2Sz1XNkzOgZPx2lmXo7KtrddYetqwuag65tJ\nJQnHAm4F37fi2+zgZtt4xAKXrQqUq2FzijZD5N1CPeKY3XMbHmAq+qsOz+Y+\nL0jsoYdAcUzVFX/wj7+VlrsiNhooPcuCm7yZpjXw1YVuRq7Z9KzQZA+jthxw\nUwdr\r\n=RACO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxooBwqjXhxP/LhvzrqJV1A5zZB70yNV2ZuJxvLkXVowIgdQ4ZLQWIhFi1qTRL4U/HD8IylbDfi5+6IGWL2TUklss="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.7_1575238178147_0.7668953920410095"},"_hasShrinkwrap":false},"4.12.8-test.1575286444292":{"name":"ts-toolbelt","version":"4.12.8-test.1575286444292","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"1fdb920d5b2bb51b1bc5df63943a482fea80f9f1","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two tuples together](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html#concat)\n* [Get the last item of a tuple](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | Tuple                                                                                 | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Object/Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)          | [Tuple/Append](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_append_.html)    | [Function/NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)    | [Misc/Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)      |\n| [Object/Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)            | [Tuple/Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_drop_.html)        | [Function/Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)    |                                                                                               |\n| [Object/MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)          | [Tuple/Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_flatten_.html)  |                                                                                               |                                                                                               |\n| [Object/NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)  | [Tuple/Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_concat_.html)    |                                                                                               |                                                                                               |\n| [Object/Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)        | [Tuple/Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_pop_.html)          |                                                                                               |                                                                                               |\n| [Object/Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)        | [Tuple/Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_reverse_.html)  |                                                                                               |                                                                                               |\n| [Object/P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)        | [Tuple/Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_tuple_tail_.html)        |                                                                                               |                                                                                               |\n| [Object/PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)        |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)            |                                                                                       |                                                                                               |                                                                                               |\n| [Object/Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)        |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|              |                    |              |                |                 |              |\n|--------------|--------------------|--------------|----------------|-----------------|--------------|\n| **A**ny      | **B**oolean        | **C**lass    | **F**unction   | **I**teration   | **N**umber   |\n| **O**bject   | **O**bject.**P**   | **S**tring   | **T**uple      | **U**nion       | Test         |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, Tuple, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.8-test.1575286444292","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GM0Wb5pmPROkKHujPCU3zI/EFA752bi8mnOmbHBzqD2ixM3w28KZqeMZ4ZlRY3XUO6Qkx7tZ5oH5l1SnSNbnoA==","shasum":"f002cb17266a71fd3b459cd3579d1bb3705a70f2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.8-test.1575286444292.tgz","fileCount":6,"unpackedSize":290277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5Pa8CRA9TVsSAnZWagAAQuAP/16ZvtB7rrKlmds6S4rt\nAvfuerrjlEzX+7K4T1PQM8UQyjPMwL+uGz/sib8V69Z7EeWL27lNprM2LUL0\n1J+zdbsqGFRKsGLNqK0rRthSRJmbvyI3TVpbD7wORBuUu7gpwZDgOW92O06c\n3PrTlhB0+BCbFFv7VYhhT9ftlz+0Bid1mjBZnF2rvrbw+Xl9BN2ehg7HtZYD\nSaaJQSI1XQbFDEKhmAmlWXAsyq0p8JoymhUCn2C8FgsYi/uFkeYSfklEqQqK\njLv1PaBP2gA6yS5xUgp7ZRrkT2oyVs1eepmCL3jpIqHOZanjq0SQtEtWpKHc\n55YRAVmkYMuRpnOCaYN6ANT2rBQfGO8E408oSSd0cKvVRdOZkRCTlqVdok4u\nDz0G/Kvs1bXt93OGS2ykUaxeJlzET7T+GIAsdyZneIUkq9IwPx1+ISa6aDbh\njHPJTIqdEi4rIrqXXoiqiWWTilIhWHbFStH1Az5gKQaZF06P9iwS16Z92IE3\nHbqNAz3PGbwI481WfLhbjbsNYhJY1joADRYdvcjV6+xjgx/MrdNQ3fcVVKtW\n4tkB6o4LUK6JFzMA8P8UT82lzXnv4aFS7fPBAfCGOwi9Z03QX0Q2OkRqtGCD\nebjfIQ+6mjwjrP0AMeE/AQieds8LyTiwGnk2obGIra4qWnh3UZRAxtlIrnP7\nETYY\r\n=XHH9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEw+TXgz1VYSqTYtH9+YlVqVlfkEaj3BBSGQsE7thqohAiBfP92SlEuhi6GqYngAb681cbWjLDI2Co4jKb5XW9uvEQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.8-test.1575286444292_1575286460209_0.9409627864313821"},"_hasShrinkwrap":false},"4.12.8":{"name":"ts-toolbelt","version":"4.12.8","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"1fdb920d5b2bb51b1bc5df63943a482fea80f9f1","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.8","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-RffgzBVRdSoBZxgd8oIuX9h0Q2ouyG/mF+NdXxvj/qywAXITAoB2aQWIn8QxjiY2E2QONn9ZI0XLVgfrB2pCnQ==","shasum":"c9da4febb76aa88ec44e6c3a03fb7713d396b357","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.8.tgz","fileCount":6,"unpackedSize":290258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5PeLCRA9TVsSAnZWagAAAKwP/0mLH1SX2oyUqDBtb7yu\nbkmDumCYuIa80R5CTYBEQrvfIlM7PDL2yqFaq0DNmKfhuh4TR87xR/346zjP\nWf1jfpi3WHDdMVcsGtml+fq7soY2P9DrNlCqBnDG+NrAhYEpxPXQCFnj4XFC\nSbmUJbLjtyQ4OWxQn0UHQfn6wA+T5P4dYOQrANLgP0VnVkM6h5lhektKVbE6\nguwja1UhnvftqsIK0IjwI4QqEo+vuZEE/ARrSmgdkfJeEugBQk+ZRztc5Tu5\nCW03OPfywIOTagXXLuP3BopUJ27C+Cz7htu9jdzlAzu64byvadhGPXpndNNa\n6ffi4+STnFwW5kXGRbhcdt0raT1jGLV53mwr1R8Yjm7snI67Q2nAAZDxAcF6\ncLiF/jTihhASLJ1/rMH/ZtXRH58OLceoI5ZQPnnReV9jJuHXUcpL3/JdbfEY\nb5f02zdxxkSxcOiKrft2nyiw1Z817eKii1WagMaIJBeSCzHlgzteagjYADK2\nqUfuPaiwrdpSF7yqoFZgEOl8dyZa/RsqCXhW6AvHknYumXJhFf0oKdjwJiQP\nlYSVez+rINxFEUtFQUTCQEN/Qh7kr9Zo+ErmvwTn/zzZOly94Xwf5IJJopWD\nI9JyE2G3kdZe9AES//66hwpOkE4HLQBF7y8shutHeDm2l1PiVS0my/Mc1Kf4\nbYHe\r\n=hPny\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8VLMg2MumjbSHsBRLAIXRzeQwOn+WHejjatHVA3P6OAiB7voIZhG3oFtyD+e9tDRPqx0H/ayad8JKqKo1jASN9DA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.8_1575286666581_0.8939235696032981"},"_hasShrinkwrap":false},"4.12.9-test.1575300542013":{"name":"ts-toolbelt","version":"4.12.9-test.1575300542013","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"6bd18a7c69e70eea113171e4ccd1328dfb6b6a96","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)           |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, List, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.9-test.1575300542013","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-m88+pzqNHSnQrdFN6MVRBwqdHR0NtxIyQadRTwDQgcrYM7zo3aDk1IQO7I1tbpzNK4ROylkDymLZpDogLqyqsA==","shasum":"8f22b1930656dce2edb0b7e3ca789db4e93c2f88","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.9-test.1575300542013.tgz","fileCount":6,"unpackedSize":289917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5S3MCRA9TVsSAnZWagAAfYcP/14QknQIKv8FUNUfYHW7\nm7URna9C4Eh5JV47Zmad1qtZzcVZWbkk69QbPcqt7SWbQ9OvHDSE1xbAYcyp\ngHGNw/dCm0COcp72hU4tBAqeu1YPqzt7i5M8uR5C0kHfPuSsugI9muCCjMkp\ntEk7LLTP1x51KzIhMDtA7JLrU76GIcafFzA1DPfPwAEPMk6uGHhvOdrnU7fw\nEWjadct2rPmM5Qh5Q1fXHBopzG/UWUTCjcvHM0LJGHCtVmO0HEnV8XYX6Qfr\njKIaNMtJK9gpZna4aSdAxMXwo7tO3Pdp8e1QgJ1bOd4o4KLGV0Nhnq7WA/Nk\nxzyzqgcrBFaFLbsvGsXvPY13iiPVA09VkQNus8Rq6h4JTS1mJRIlFvpy5BPq\nb0OS1AbQhsVf+0WJcLQ19f/fCxbWtlWjDwmjc2+fKZ8wBxWenHWsV1cwJe13\n4zyGZHYFNep1QYloEc7qm1iy7dIRhRX8aA3WyoJjOmJNy4OGKezxksD31Cab\n7WXjd2isBfzKKE8nYwJPdZwBKEZ/Kfq6rm/b69O6OMy2UQ9hqkd1KNDRzdST\nfiiuEou0aMEcx81uzcniFi8w1GDmUoBNOKeTFdI/b/H3+Vdwj7V6vwfJ68oU\n84i064xoiR5GyZ5kDhN4ktfkp3hTGqdgc3GOW/lRz74Fq4WOPcKUv+CPaNLJ\ntmOY\r\n=gwnq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsrkNaGEH2sf0HXMlgr2A9+OAPVegEW7OE1ENK3SUC8AIhAKJKFh2UXQSXwc1iPOtiXfPZPPVQG1cBnxDy/8tO45E/"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.9-test.1575300542013_1575300556471_0.0053809213854363325"},"_hasShrinkwrap":false},"4.12.10-test.1575300954385":{"name":"ts-toolbelt","version":"4.12.10-test.1575300954385","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b1854b5605c7325187a6960b9fac6a954202e869","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n<br>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)           |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, Number, Object, String, List, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.10-test.1575300954385","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ZbMUvAPuyBtfM1VxagpwjFbvuqP13veMUjw7+Kswu1chh1MNOvbRLhTHxPEkRF5R8TPQbBNx6shV/5PF2F3TSw==","shasum":"8542584225e9dac3eb313f07887d45539a97d1a8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.10-test.1575300954385.tgz","fileCount":6,"unpackedSize":290210,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5S9pCRA9TVsSAnZWagAAPJoP/jcL+Ll/SR7OCP1yjoVj\nEYCWD8QhjH0y/Mq4TqyvN8r4eTrfh9Dw/uOVpTYQSksGc/SgthPzLyQIgHB/\nGlaWzQg4pPoTNfjWETec6Bo2NiNJFsREpBQW7b0QkyUiz/ooLtEK5Gqx6uyY\nA/QxGSEO2qTbQbHaCNGxwdGGKGWwTD6tDeqkG5lwOCrMby6yw8wdqsKdJybR\nFm2V5cw2j4/lcosRFbSVqMIxXLTzClJSpIAGFsnBbnb51gpHIyP9/3Yk+W/t\n7xmPJQI91B+L01r+FsS0AgaZM8p7khoI+6GyG7avZGyo3Dd2Y7Nx5g4cS8Hs\nuIh+yfniUhNWmL8BJeods6hdVeZMkyKCL/2F0JCeXEiUy1yd8TgU0F+HM820\n/yOF2oyXurA2ECSA9M/oWLNx55bQEKeJOuTeuJfDaarKRyZsVDLeLBwZSVx0\n7ThR/87eXS30+q1vq8axBBdn1ZZxSfq+I5E74mhCeN/GbQhIWn0oykXb/xf5\nO/3EfJ4y1DsAVOmucO7CPVa3ktzUlsEhwrN9LZ9SRwcxYZYOFcPb4GW3MbCG\n9nsO9OhfikgULTs4bPy0EHVjLbbryLcughYjGb87DwnFrEDy8BJLvfw8jxru\nDdeAyGoMKKsbEHDM5Y4ADKfKjewGwlqBL+FlToS6fp5FEpLO5NGaUPaKrVC2\noInR\r\n=FRs7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxlWTnB0c9ow64+YtSdV6BbMYYWiKLp+6xnUyPGwMk3AIhAMdFbD52Ek1o4o8OtvoWtQnlo4G9JS7Wnkitl4AbQCeJ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.10-test.1575300954385_1575300969096_0.0014656992803234736"},"_hasShrinkwrap":false},"4.12.10":{"name":"ts-toolbelt","version":"4.12.10","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b1854b5605c7325187a6960b9fac6a954202e869","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.10","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-7HWn694UYyRgDhybR1b5ColAmLW9ErE2AE2xxon+tGN4kaHa6RXnJhTzryF4nbDAixHYHvnnP1XBkwvHqavabQ==","shasum":"d1610017c767217fe912881ff44fa1d01cf70d04","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.10.tgz","fileCount":6,"unpackedSize":290191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5TA9CRA9TVsSAnZWagAAUsMQAJ53jNlBPysNE9N/47FA\nLhWFqiB3lXAg0wWO7aObk1xuH4VuRqmnNdZ7sjdQaWcwLCAkbVolyKZsp2Xs\nqM8jAIwgBylOmT4qtbdQ606HaKPUQ3e2J7sWOJZASfbWoJKcsy26/DAnNcI2\nYEPE9kivEGyZgO37LuZ9Vrkf+NnxlMZRj3hW0jMYVwxFLm7ElStr642e8PK7\nY3T9x+w11srIRuYIf3Fpa77z2ajvW0qnfI2T8Jt6Acihdh/dEsKFRvDSsokb\npEx88un6dwB4Z6tj9ICCwNqF4q5sLwoss4/kU6SJ6NQ7BqEhaneXQNC3i2jC\n35mGy2/NLdnipb4VPso44+yiW/SdgKNZiKTiniemd8DhmVV36m48s8jj0FNg\nKa1k8APgBOFSirX9WRkIgxtudgppfe6DFlqxyZwurMA3WapSFu7+wtSZL3nL\nik3jdZagWWuezJku0RAC2afQE7dv7HSUYiCNP9OtFw0f+Mm3b9yWqwi91quj\n8IcUfPxOotMtGqcTOJfEJxV8k3LOPKGdTINHYeqhw9LWZyTilpN3gaUdX5/m\nO5iY3JRUx8b8Sg+7EqJTSi8I/czhyP8D7qpLVjVGLYVocGlmKDIDbrSHwN6C\nsWv5V3YNcyymd2A8gVH3DC+3poPOpr0vN/k8QmIRMFgNVcQiZblVVvTFtiG1\noS7k\r\n=yCGg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC3FdjBla4df7Uu/6QeSLc1PKg/IQZwQhbvGL/qVQRM0AiBjJUeac+H4At08XKVe59rUfjmYD8egcLYKXvqqFUIP/A=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.10_1575301181393_0.5889463959461154"},"_hasShrinkwrap":false},"4.12.11-test.1575302701772":{"name":"ts-toolbelt","version":"4.12.11-test.1575302701772","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"028e3327594d6eaafa011a0d0270084cd466a0a2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h3 align=\"center\">❝squash your bugs before they even exist❞</h3><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\n**If one of your goals is to prevent bugs by focusing on your types, this library is made for you!**\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)           |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.11-test.1575302701772","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SBzQLXpIVNS6Rew6Zofq+SlQQkizI2aSUcnqprQqidSEWTYgAWWubdUjIWiVk76/UhLhLs1EXUWIUCxDIDYXwA==","shasum":"39b662d84993ed636ba2993d3be9c3032a8a1715","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.11-test.1575302701772.tgz","fileCount":6,"unpackedSize":290712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5TY7CRA9TVsSAnZWagAANFUP/1MUSzc9pSw1EkLhrSjH\ncltjPSS1GUjepRkEpY2jhK89oVOhP5M6kZh+TVahXZEJvemC8fUBC25EyRIC\ntzB+MryeqDTzdLcOyFeVnIWmHQLXSRqu9UyVHu7P0naLhjqh4Yd4xk2Igi0j\nqwo+QeWNdf1VLrvCxGy6FoDMwXXjRgPz+R/01CEPlB+D0C5980LC99gWn/jN\nhtOVLFKXc1UDYfG9nGXxR1y+QSoeN2I3dAybogw77KhS9FXkSLKyji40uvG8\n2lHTHgGv4ajnHVB5fE+J5p9SGEP0KCz+XbWQDtI+nsDBHnTknVDE1bsoma2m\n9+h65Q8sbbJMPtO6mjZSpCWxLYUoYQ06oiRALoBU9JLxsmRl0eEfSw11GRfF\nkDbOue8r0HBvItH9OEeBPJpiMoT+haugl2VrTbAcgd6ZOvPexmW5pWSvMpO/\nKsqpzFQpuUjZWAvgY6wk61g0rmmW7hmchhYkGZmzNSxWvm6RXS6cpbNJZu5Z\nRVrOIC59Ox2NmABX4A7M1o9kW96nARKUQ2gypefwGVpVO4kCUXbcQh6UaMJR\nUdKYYy19c22i8GorL4oqU48ag+QZDVPEiIQcZd/5vgH1kmdKCHY189cpFXsL\nY1iAeZ0U6MOGOuN41KzTNu97+9+DdHdrf3WX8hR2KBrlnal+boBFft/NJDfl\ngD2P\r\n=aaBR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCU88G8gZjci4Q4vG3Ij2YsF7GKna48JGSmbpVWoz+nQgIhAP3TJ+PAdZS/vHPTAus64o+6wNRaaoowNFGYI0ArYZdQ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.11-test.1575302701772_1575302714887_0.312929757029315"},"_hasShrinkwrap":false},"4.12.11":{"name":"ts-toolbelt","version":"4.12.11","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"028e3327594d6eaafa011a0d0270084cd466a0a2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.11","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-hzMlJbTOcXCgr5MaGc7soKbnnsOb2iCI+eGSrPL7wLQQ/6GugrBtHGBT8HFmKdzIpqeEeVyoTtB+g2LUOVzb0A==","shasum":"cad7a5c55488bb9888fbe9d0d6ea88e9b570e670","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.11.tgz","fileCount":6,"unpackedSize":290693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5Tb4CRA9TVsSAnZWagAALvUQAJDHxYJNrU5F708sTU69\n59R5kaogrIlQlqW6WtOHu1MrRi0uRJqIiWZaYdMU7fmSxTx8np8jrLbSPMGo\nC/w2xkmfJJfVDylzYBx4clgH7K8zfGHvB+VAmtrWGbmNskEx+9rp2sFeKDId\n8V6h3wtZU5WtW9Dsdbtzex+Z/NJHV6SJi0tTRhX1PoHJ04FtxGvLVHnqEIHi\nGs9W8DB4571rANtNlSw0pmMZvJ3958biSShUIedCUkL8UeSgj+Wg55n9Alpf\nMTWv3lt9XwTziqMgAz5/ONI2CidEPNFFmfc+benTujtwSDPTY1RGSyn+v6N/\nHaA1RyLoWcBqdR5tzpONcHBB7AO/TS6cLsTAd1dTGXqqV9WenfsdVzvqGEV3\n4fi2XljP3wx05sBXUwkz92JE4QjS1SBlg62XCCI8H3N1geFhbyChROqBY2wP\nS7CX/i6mR1XqFMNUxIY4V8iCiN11BBP/6CFIZQF9Z8OqbQ7wMqDpuAmYdvQb\nZwd4ak/AFAmy+kzbAPEAnaxLxdypYTQaxX9Sw2xi/0ZRUxYEVd7MOJk9+psy\nWiAZp8wP+k6LEaxRg2368WThmoKGMBIVdySmysB63NVJIYett2KRVh5H9A7H\no8dfrHXRGZTKnrjC8NArJqUBkxrqwIToRvQkZqFJRav+B46RfDtNkAm8NDXY\nRWd6\r\n=6+o4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAs23r7l/l5UK0BvkKZ0bfrDjdaGRUSORVKD2is7ANEUAiA3/EApXZrn0KAo6YK4AyNmrzFRR7sS3t87DylC/bo1Xg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.11_1575302903914_0.4899766609477647"},"_hasShrinkwrap":false},"4.12.12-test.1575369881276":{"name":"ts-toolbelt","version":"4.12.12-test.1575369881276","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9f0bfdfa81f68b0306cac8d7c7e73a8443796e95","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">🔩 Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h3 align=\"center\">❝squash your bugs before they even exist❞</h3><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\n**If one of your goals is to prevent bugs by focusing on your types, this library is made for you!**\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)           |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.12-test.1575369881276","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-a8LC86p1XybVJA8/5pL0zDtF/WE1pX3iSaVgJrR/LEkMR0UmAZ/ar3hSgn9EWHbt9oqzWS/5WlakRK46slL5ow==","shasum":"345fe28344354e8cfc0cfb3bddcf8060f591fc3e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.12-test.1575369881276.tgz","fileCount":6,"unpackedSize":291195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5jypCRA9TVsSAnZWagAApi0P/0yBnJ/xM0IEM/f47jGs\nUp+w0dX7uGyaHorwqre3s1JM+Qz6K8gpwHWl3tL/P8bUmONSArmt5dUXapnU\nRPq8SBe1buN8GtaxSy/5O5B9r3Era2Hwo4pRrxnhMweBJYCn9d3BpCAbh/xs\n1zxyyxgZrHIFe1Q6gMy1ss1D1OfwIPBPfrqbVagDNmtTWkKWY6Darv/RiCl7\notytExCaa/tGU4m1BXOZInk7iFhPm43Mxo8JdGcI1r0nUGlpO47Kt/MoSYJV\nUsT80m5ODE8j3SwO1kUeqMGJWi41nfjiri+ZMed2+2mTnZfNwF/6qJDSxwmf\nDf8bYDmfzaHp1TiGWxYW+8F0gmW5JDxRtZAWSfnfJrwhbgiAAyBScANsotSR\nj50kxCULWm3X8pjDgGlp49xbQ24wFN4/no1EH9dsr4cVyM2Fykl+c5T9fGn5\nGGvcvu+ltNYus+q6AE7RhpNCDB0tsHH6waLqnE+ExAQKFIj2HDLIjXjbOOeH\nu3VEs84aabBn767HMBDa4r/FyJLJouKKIFs5+geN7BowvN+4uO13JrrIQ928\nwo5hq7sA+jDJoESHCOMDHNYa4mt5oeBluTTfbta5l26bG+HhDsyWbRxNUPCB\nLuQ7vDeBk6Jl4TL6jao2fkUbO47v7KBf+k6i0eXkpeodsHixwDP+QFwTJAIC\nH9x3\r\n=WkZ9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB5Mi83INYDB5Vrq2rK0zLj2oLS0XGCyZvEWNnZZ7ZbrAiAy+ZY2zzpnlrV83GSowHpTSfiNb7ixIQK7xPD46f6ZcA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.12-test.1575369881276_1575369897445_0.9923034271846594"},"_hasShrinkwrap":false},"4.12.12":{"name":"ts-toolbelt","version":"4.12.12","description":"👷 All the types you need for TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9f0bfdfa81f68b0306cac8d7c7e73a8443796e95","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5Fvhfv1YRFYiM594wqO4fFJJRxP7MdfvO/wBEhLN6kCG6cUSjqInKeiHEVsdLC2i2KF3cP+XqXxzPTcps+0mDw==","shasum":"7e71b5768a82d4ad5315e6ae0d9f01877f64e4fd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.12.tgz","fileCount":6,"unpackedSize":291176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5j1uCRA9TVsSAnZWagAAVbcP/268hZ75ADbcwk38AliA\nuPD8YUfdQLhbP1l1EKS/y6EtRbzdAbrDIXScVeE7KbQ11Odl9pN7Y3GuQUpU\nQ/NvDppr6wy9AO+ezFWFM2AldSrVvOR7XAmuV54b6wWXS3LIKO7P5Bh84W9B\nTF++PF78FSVJ9p4CaUCkUtmg/QgJKsPfansQ2SfPbIJLGWlJ6hU81EUuCcj/\n8b/BgpC98y4u6syBAVcoJKOMJ7dI+7Qjcixbg56OXmv6NGK131fWgFdTNCuG\nk72OX+zGnBLygXtPe0tRaE2e1wd6+9MSngM9Aa3tlGNbvsnnRsmHyQ1MVl0W\n2JSqFNMNnjqwhgF7nI8JK9ziUdjY3vfrUuf70XeJjoVFhpLneqNIGzFzd4py\nbbR/X1ZQBKlmtv6rS860XmBu3Td2C0MkNS6MAmEQw/N/uRPBspg/g5MtvDf1\nggMoke7jg4PVfHA+P/c+rF26VrdJK95TxWHeFHXREhaljbZ7lTFkgpoaLF3e\nslP0tHhbE1wXl96vtkK+Z+cCD/3YUX8zHa6sf+SXjC5osKdeKg5HKBAv0/b/\nHRvW/6xx/nSPSc0SkGIKLiuOhmLHVoWgskLIUjlF6hcn71RX3X9it0QgV78U\nJ4mEMgdJO+5eFOk/tnVIhIoBoMyFrGL9LxSqctIRUIn04bDiXvYlbPox4Cj0\n0BlJ\r\n=yrBX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC02loVMH80hoI5zff10PLI1/Th7MkvQwoWChpJkouKxAIgH34XqHpb83MJovam6kBvhmwJrrZdDaDonGVe7oE67LQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.12_1575370093824_0.18190974710185426"},"_hasShrinkwrap":false},"4.12.13":{"name":"ts-toolbelt","version":"4.12.13","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"5dc2927c9d38212467a4e9e2850bfd0c4fcbce0f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.12.13","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-tnMgohN582PAv9u5xX8tsbdTzawRwyhvrg2r1qOgiAUOXB8ABGwYQeOh0qfE43wKF0ygvbBrM/CTZMED6ow5ZQ==","shasum":"a2fb92f16ef6e5828c16a8f403e1eaf87703160b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.12.13.tgz","fileCount":6,"unpackedSize":291326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5phCCRA9TVsSAnZWagAA+s0P/jqo6/Pk1vWE7MnQaHKF\nYxohZ28LxpKsPLi2CLy0KKqBXVdsJoXnWXj66lWHQb5+2Vcs6Fu5SZ1qT/Kn\n2GvQP7dO4uS+qcnP5NmG62k4xVDBVPjExEDBmDOZ1ORry/HdbqUmNtiFCWN1\n+YAKGaf4nm0+9/CiSQORpoNLem1++QeYiCV6pnl2xABJLpCLPM5CvQo7sC/T\nAJDRR9fud4A86G//jnu/t0x+wPNQ7XFMchrp3k53MWcMbh3sPTZppSwYL/Uf\nKMIc2Vn89bC9QM9NwgHPzkGppxNje5hWA2sNrnRB69UUDTyLG51pb7iOp6tI\nzwQy/AmVQx41SUkf6XmvpIjDeQW86xeFDv6wrheOmclfgyDDUmnBoIarRPYe\njBcZ0U+AP3XY6REwaHqw2RFoaKCvHQFb1vfaukYmNj+gdZUVQz9fpxeNFz7x\n6FG6z0CInw74IGEsJb5C29kR9Bj+fRxUzidzPTtaTRDSYWqyvs1KA/rXOgBo\nk7RnYxKS90BnZJSyunQ68gh0SJDSjoy8ncTFFDZlWwSq3G9iu4wO9zI9U7Tf\nPdDXZ7woeXZuxrgMejAQ9uKrAT99QRu1K7uIUGN7J2s9zACYdAT++kevJlTB\ntCylrcC7xp7NtxAqOVSf5iNjE9ZiT85PULDJUm7c9Tnx+qTEKHapFEvlZhqr\n/jmQ\r\n=jAce\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDf3rur4vCKkTXmcAIZk9TJ47ZJ0ZwG0insqTrOyq/IkwIgTEhJf8Kcl8qEcEL0cRu1utRfkwNmLU6EkqXi/AE2u4Y="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.12.13_1575393345492_0.0779359508970705"},"_hasShrinkwrap":false},"4.13.0-test.1576073602812":{"name":"ts-toolbelt","version":"4.13.0-test.1576073602812","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a4543351996ea67346311ebbe49a298ab7a7ad3e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)           |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.0-test.1576073602812","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+RccPeInpHChmSyHw4neK7/1yjdG43ncCp01bHRN8xoQ81fTVFNk6C9y+Y9ixFtmCgT9cuVTiIMFiMGzKEKLSA==","shasum":"f704f3cb210ae9d7cd72074eb290f228f9dfb2c1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.0-test.1576073602812.tgz","fileCount":6,"unpackedSize":306703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8PmTCRA9TVsSAnZWagAAO0oQAIOlPlvmq0i47m7gTPdo\nfXxrxy1ANuT5n7uiSUXCwf9qWtp8GGzOF8dl3ih3jzsBnCBRXLimOqqUHoTC\noQZqmuqDd9UyMFaaTXN+pNLRK5tjSVq2M7zsatst1Ddv5Mvs/O0ANY6sLG98\nIZWdYzbMVsrvLdYsNZxV8ylWfLknj9BxRcxvmj2Cop9QSbL6X4DHmZqgaukT\nGU39W1ZEIITo3wuJSJjahcgmzddw3iupt057D0Mc+kR99pQiIttsT4OL16P4\nnBG2cFHdkzNbKESIWKyxMXeEOehpAvg8g07TRni54CQ0TZcAN5339/oSDsNY\n+qaF3ReGC4KIkd6NXwcXYJAL2O4n8yFayQ1F5HuYLsfGMlDIilwa3nX/IBnA\nX5VD5Ji0Sk6B+Cu9SVjpSnwHOqcUAlYIhVBRt9uy/QGDapgAwHhBxsiAyUf2\nuYEpO+1PZtmCjHx790rx3BR8lLNBNj9BK+WDSJ/Y+AVXNZvntQTG0jgM6+UN\nPeV00uHolDrnR8xjZJxtzpyQJ2b+OxzWn3YR/yNuWmgr/S4cX8EtBjqmcvO8\nx0zqYZbBPRLU5U3VLHBvTOtJ6QXMtHffyWdgmxpsNFE4kMwcQQPRLIDvdcUZ\nA+ugMaqs9nZStS2mLsGkGwJVCAJEvT9AP8dBLd64RJqfihj4RXjsdwDlwPDk\nzC7Y\r\n=g2Vu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaHkdbsGrIMLDSO+P0pqigXytkjEmnQCLbmk9KeA9RyAIhAITCGy45AkazKx7RiwAX2ORDBLohDsIjhBAiUw/YPE0v"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.0-test.1576073602812_1576073618839_0.9523873705027077"},"_hasShrinkwrap":false},"4.13.0":{"name":"ts-toolbelt","version":"4.13.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a4543351996ea67346311ebbe49a298ab7a7ad3e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-QWPlNcoYYgWfeeALrf1KJQD16yoWssFXKZmR8I4hYg9pNwm98VT9ZyOt/NjSFOdD98KSxQxLudZf93+ywJjQAA==","shasum":"190f5af720f81fc302db2a5fa7d5134318441102","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.0.tgz","fileCount":6,"unpackedSize":306684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8PpyCRA9TVsSAnZWagAADJ4P/3E1oB8+SA3Z8aCZyPFj\nvfRApeboo0Y8B/LetBM9U7sRsANR361azZXAyaBPXuAosqzP/+aCIoA8xa9+\naZKHXuG2HfJrxhmmzmwuKt+Pwrbp3KL6eZxSt1OaszInlTHQ/fVTRYHatRrX\nG8soFc/fJRLjojIhc0977pbbff9QFRlmMbNBSEhbKDK5FGdKvGLNrv27n4n3\nTkqenDoaVeRCnjI2ydZnQM2u/7XsWDcyAKzH9gOqEKI0WS/tx75X+T0YCj8e\nJASKkh6/Ba8x02UoeGpFHHG20wAqcu4jSiWXxYOEKP4fT80JQDhsBRNykmX4\nCqcVPilSahJoUctJ6LYHu1UvqwprmjyKud7s7nmV+YD2voS2lmD1h6H1g5gE\n8HCv5TOiHN6hNmC1GrX2Dly+AQYHgBbT7fwp33e0X3CY/gIHgHLapY49ccHI\nYCoFRqhK1qYxP79wwE9BpoBcOu8SGChOJBYmjnHBYEfA0C8O3af5j4/K1WBI\nZIuRs+1epTuTI/SyfZiizXp2KmHcKC4H6tzPaRUWpzrHaZlxAf9IjmW6eQ7+\nmJO5KQsV3IbrDYNW5o+ozWa7slB+tjixewdBAVqEZGCv3LUYDBDLjgSWOtdv\npeCDiBEPDt0Kpa925FymaqlNmkcXQAmbbN4yBAXeoZt8oXEMmupGk/ezBSbR\nebOK\r\n=wwt1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXNwN0Uqkiy8LkyF49nYWg7Qr/RngzA4pJ6BANN/g1fAiEAiSa60+PFdh573vvgpOHVTLY2O7LV+dHhVXpn83RbusE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.0_1576073842195_0.39901459151412233"},"_hasShrinkwrap":false},"4.13.1-test.1576089236439":{"name":"ts-toolbelt","version":"4.13.1-test.1576089236439","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"becbcde6b94d215f66036c7ecc582093831028df","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Misc                                                                                          |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisable_.html)           |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.1-test.1576089236439","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bTBGBlI2BucFaDKos71f7qnRAJ1PKFE7ZTi8YJx2eBaei1MKq+C2930nobD63uI4e532rSsDi1IuyPFFJRPrnQ==","shasum":"f543921a857a1255c95bdbb2f3b4b8cabf238671","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.1-test.1576089236439.tgz","fileCount":6,"unpackedSize":317921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8TakCRA9TVsSAnZWagAA36QP/jfyxdDSLZ6lxUGZHpR8\ntddVuUqsqHoT15WyLTXujMkeSV8uRCNQ38LCNrKPfBV3l/OVAUeolrZoidaw\nW4bIcq3iJehLH9lSxi8DLx/EQymbLbtHe7zlM5Uq4wl1RLZCTMgGJj4njPe0\nnACAsiXQSztRYRUDIEcDSX/rnpIpNmj6tNQYzWwEQwWBChmB8eudlExUOKQD\nqFBRNDbqGbpvSXsZXSM7TH8uEgR5y74dohr4+w4xLYI1VwhoGZjcvxJvPXMG\nuB27Y/GUpfpH/NfjeyoVdTFqOoDAnqUXsP7n4BzOJ2uvht9WCc/huhtp3jad\nvLT6Xl4+QiZCem42g3bebtu8OIvhdgv2yhlOUY8R/b+8Cl8X1dtSvlGGdC5K\nrznshng4ieL5CHCUpjf/s0D/w/7kTI4gHdKo+baHBbe/fXZG9c9l5ARUWWNl\nH/he4klW5/D7+QNrxPYhhB3XpQ/dDO76JUJp7VKS2BmacmxcJTYaEMj6hK6V\n1FJ9UYt1ZkvA+k69GKOR2hoO9+kaZajNf0sbNl02IJzV3KGzgjoIklew+6je\nC0axpeUbUT3u91nSfpFFsYrJ6DYZgNH+tHahaHaE+dSEQEHeYWiJ2LFbtHS5\n5G4EEtPwmDNAQMqR4icrPVF+ivgjH02vxaqtL3E+29TYWiGkm/EfTPQd6VmO\nLG3f\r\n=GoW4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5N+F90ce084mN9kEv+/+nq7nbzlZr+8Y8xQebIp4tAwIhAJTiNnYpQKs8gPAYh5bOEOg8Z55Y7VFElw3IT0PhujYb"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.1-test.1576089236439_1576089252179_0.1294168707197727"},"_hasShrinkwrap":false},"4.13.1":{"name":"ts-toolbelt","version":"4.13.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"becbcde6b94d215f66036c7ecc582093831028df","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-2aFzvmObPy0EMB9j/eNM7z0z5Y+aa2IkBinoYOGcu7qGfqyE8CYYvqaDNUhKABvO4Et9BCgAwMWb5NAMcu6U0w==","shasum":"c9d1f7e77d04aab18f2654bde6356a3122f81267","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.1.tgz","fileCount":6,"unpackedSize":317902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8TdwCRA9TVsSAnZWagAA8yAP/Arr7Xt5f2C6gaFuSO9x\nx6rtU8lX2FJSSxnhcICP/x6bM9s3rpKHpPDa0L6luBR5kW2tJz1D1SIoZ5qv\n1+3mmVNlgnwYoH1O0Fu7cwoKCaipOp+eK2xQbQysixLD3M2B2HEmsHQ7Zt0a\nYg5M0R/9mVJFrRMfpbed/HyvQD1bOmYr6EBKWxN4eHpDOVYIx7ocUKcHNHGi\ntgyVikUiJ3xPWyeRN/UQkOeuc5wARlgsR31FZVJsibtFbZbPq7Y6rNYW66lE\nDlpFlgf7GeXZfJ8q7zrhK+N4iTQXYaIf/QWsXgRCntM0Rhu02Rzsd5nr4zhv\npmyOpeVPC4GL4QtlN0FQ6JxiFxd26+MMK+hqfPmakp5KbXeiEf+58ZrjVxuU\ndkmZlIbezqiv/j4Lg2E5Ok6zOHr2qe0VQ52ixQSfoT214qb0ICDm4FjNi0VV\n6ZUB42zJON5BB0M/J3YMxaKjJicxZRgUykYVQhipIkR+F6FFJHHdnUWrjXjN\nDkiH0PPe2Z/dV5rFVeGIWGjm+GZ20yJ0HsFJ8BNJXDAoO5Hrp+hL10ycOXWt\n1pShRhPWWLhDrAiXQ41FBB3vHUXzUB2Vaw3XFspe8AypjRpxkJl7jsh9S42/\nFrrOHwzC3dTBSQXRdnJIQZSa1bUO0butngRDml6YXEqId1E6reP+FooM+17I\nVmzV\r\n=qQmS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsoWP5CJs/tCnmBPNQMtM5nX1ZhN9rZuuD+3GJEa57LwIgFAOhmd/w8lhXE0uF6uj3G8y3PmpNaNnDWozTQp485SQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.1_1576089455981_0.790888750499106"},"_hasShrinkwrap":false},"4.13.2-test.1576089862967":{"name":"ts-toolbelt","version":"4.13.2-test.1576089862967","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4d8e9e935bb2aed1242e6db014c308499f8d3e8c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.2-test.1576089862967","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Gsg38Ul97Yq8DMNS6IEvUiXtzT1+g0uwEeOLB8OEI1uv3fpxxbe1eert3RRrkZbxbQiPMPR8ARMfw6lPdbszQQ==","shasum":"23ec02e23cc208500aaab48f893a014abc109715","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.2-test.1576089862967.tgz","fileCount":6,"unpackedSize":318256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8TkVCRA9TVsSAnZWagAAdMUQAIrOUZwPnOjalnPorsuu\n96gMkyxUnhM7ItWZV0apT10kwdS3q0cj0io0MP3sHgh+1zxYBRcI7sxxknj7\nIB9aVLg9m4CLNBitsSX6aXJM91W8pWQfrGTJ1gz91VkhNRSOvJcVGI6Aq6h/\nlxHnHwAJhOwKzTwNM7bHsTnOTb7vCwaRzcLx3f4qI+sfEZzEi43dzq3IEgwu\nlAGe49fzWQljXQl0KQg0VATb/bx0khbDQ/iNXPbPtcws+3agGgRWdNxfwj4S\narPaTg2tNstVJbWpghVo6tTawrujyoLyFTJRR1U8Lk9C7kKYlGfCvudLYQ5c\nUSwkKNzo1SG+G/0284Ao0Pr1HFoUbYovRCxFIFGOwpz8grhooA++SBLeoOqK\n+M5mEdzoY7ZZLUNSWEmHDupkv6KXYkoDuNDSdP2wjP1pTBO3F+vB6BbZNwVo\n3ZYLDSsQl8vkdTQF6psJV33RrzoNHUF0XptZnSYugRJsgSiN+2SPevIu9xkM\nSIi/Xn2aBWZJbBBDpT/Ud0NPjgHQHufZjxx9SCos9fRVSpoySlm2lmYIBPtr\nTQ5hBAJqXFA90pGWSoJmzJwEZF2xhDcmWQvCZ9ZDM/zdLpvKtGC7lw/uB8uK\nYzhj6mkeXp/97DeSSAFyiVqLYnMlxPUTVMqI5zC/7yOHsWLtj58UJufuwydR\n9eN8\r\n=xAs8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBUELEVcL1n/doWRRGr6S6PhhvIT+mp3r6XgFVJdPyqPAiBPbipRmFtort0pYYQrc1wTbWQoJVAl/0rD2D0yArzM1g=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.2-test.1576089862967_1576089876642_0.13885575531399708"},"_hasShrinkwrap":false},"4.13.2":{"name":"ts-toolbelt","version":"4.13.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4d8e9e935bb2aed1242e6db014c308499f8d3e8c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-4XADP6qbzIAzsqOr9/ebzEv9ItYJ2fSSoZq1C6KsE9+aJ5mFSGO+JqDoi1YkjjZ/FabaMcEsL5g5L92We/lyqw==","shasum":"49368e87cedc3e88551a3327dc76b41e6b6d7305","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.2.tgz","fileCount":6,"unpackedSize":318237,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8TnWCRA9TVsSAnZWagAAPy0P/14pU3cgisINopbAZauD\nhqoPfRKBYP+oGA5zMxugRJuKGY861HND+mIk8RsUxXxAtfPe958UemiZm6GJ\nkRo8BJves/08qMDUcblVqHQK0qEe2pFVnq/FAyDiR6Wjgzn40hTEyUIpLVsU\nExjdIzC9jeL9yWIT9Gv34WMMdHWU9/y+PxqlAMw2HpMjP/9AN7gJP08f8k7W\nOoQc4fUUb79oxspFEwp654DXUXPiJ3ztAFfRf5UMJ3D+ZdiYVdeUVHZ+6RcH\nsOEI6tm4JAbwuVaeskf3edtG3KixqMz7mb2o+a9pWyfE/oH/hpaZ9JJX0IfS\n2Qk8Dr3YZVc11oiM8Sea1H9ued8UyEc3COd4z3H5B8wAlmmoxSEcGO/9o/EN\n4jgkz+KNnBoU4vXlwJluEx7B+KSjviZzTac+jfQ5itBEFblxJjwwrDTRXvkF\nHbRyqS0BY5z0mLH76ALK3tVx7B5jLwH4OGn7fcNbKhDa3ex85jm+WyCCSZ4Y\nCJJjjdiPwL6DVuFra48AfHBootsR7n3YenvLFASvUDctVWpo5C+Mf0RNVf9v\nDXI1xJpDF2TQXVFRbNFWzx4u3WbjWTiXUWdcvTECV0KgPe9C2jRDuRxRWQju\n4i/Yay1fPkL+vkFPrRUnTFWAgJDTZcX1BpAeApoMOKPzjyn9VyX319csc0Ak\nv1U8\r\n=FQ4M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC7EQWg5XJkOkmJJtCjg8mbeLAEMdLWoehzEP3tqo09mAiEA1tWc4PDAjgBwyU3KRYaYC+maB/LNJbr+QTcMlM2C1NE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.2_1576090069485_0.04670112025664186"},"_hasShrinkwrap":false},"4.13.3-test.1576093995645":{"name":"ts-toolbelt","version":"4.13.3-test.1576093995645","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3c764165c8cea4f7fc127f201e9e15bfadd61a79","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.3-test.1576093995645","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-OuXKgKtxJYL+J7J4no+Ai49UJmcaUofnUjLn3xFthS62TayxXGmRERhQtjwptbNpAHmFuFV3DEY4b4vOeKqQXw==","shasum":"d791520a714bccd1ed805d25ff9d4613409826eb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.3-test.1576093995645.tgz","fileCount":6,"unpackedSize":319309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8Uk4CRA9TVsSAnZWagAABGsP/3NmFQuHGqDBNb0+cGX2\n/jwL7uE0Xa0iJ1lkk19H4eDExYxu+Rl2nRpPd5nRGF53aTxoxk8XD/p/2RVf\ne29YA1PaTMWMWu3x2PgqMHz8EFtdzItUZ2o0KT5G8EIf6HR9oejha7Ul1a23\nAJcDnJVmyAAyei8DFeG79Tc9Y24KmEPveePS3rQlbBRJVtgf2df1V2vJgq2N\n6qKqiItnxISzFDD1rApGBf2wsiljOgzG4XCzv3kLHnKN1ldXxOPPXASSv4tn\nNQi0OpPDilw3uiAwjpRY9CscAW43rynu3mp3j0aizewKtY6eLjIpIroWCSos\ndE2zxD8cgBT8fKlckGxkAoiAikwU60imTJB/9y5YFyowsw/N3fsmvnExgh1L\nT2BABn+ucHuZf0ZrMWA/67iDRSmINaXPUFjmes8mCxs7jbHcfDJ6rn4evhM8\nW139m/w4n0zddpR/g3W9AJmC1UKft2YmiXyQGqsBJHgjOBeD76qMWkE+sz92\n99tmZ6MKNBzccEH7/tClHAt3mnUomlsQBBXg5k9D1JQxL8yXa6vqTcCo965s\nl3OR0GMcm8+zfVNudkHjGsbU5Gg9Mdj7VTOUCp3KO9xWNLzvzIb3cN+/WAwx\nulDY/1+kzoxEgizOaGw/ppZwtxz8ApOxH60ZLdozcGNeoGSEWCnNK6Lwl52A\nbgyP\r\n=nTPx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDELOsTBDWZLMgRPdHnNSv6oQGWHK2aZyd6p7DEBv7wiwIgR3tc7gx2bzZxPXruv+QO/UfrGFvzRElSx1DLft3Zz7U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.3-test.1576093995645_1576094008525_0.22581188240837768"},"_hasShrinkwrap":false},"4.13.3":{"name":"ts-toolbelt","version":"4.13.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3c764165c8cea4f7fc127f201e9e15bfadd61a79","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-BO2SJOKA0Ga0tk+a6BXAwYBfj4YDyvwrIITAnjCUO1NBOpoTgTwl+fEXvHxk2bS+OyTYVBRAW9PQM/s/QEGSCg==","shasum":"cfe59281e5dd3961145c424fe0df1dde33a0d731","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.3.tgz","fileCount":6,"unpackedSize":319290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8Un/CRA9TVsSAnZWagAAjTQP/RxynHTfb09d+tNjo49w\n4pDSW15qMkdoLlbWRUWGNbzmHvWyBE3NztiP0oJWL/KOvOQTKM9405uSnO9M\nZ8n1Y2fXQCK6c5BPXBrzOv2BM0F9Q0acIP0Tc6tXLsronNV8Myn7fb+p8Jeu\nuTFcibVlRlW8FpQOhgAFJdARP2ybfxeFcF7rzvjwXzEDMScxbGGaO/e35IEd\nelWHjnLkMjW7nZro4ZzGaJVR2x0pOrgaQx591IEMk1eByClyzsiY7LsUzJvm\niElDLpoEvOkgFtfMBpbc9kGyIG0CI0sbXmxvRssDPtg7bw6S3UvdLKqIT2hi\n2ezY9gcWIVCtZSB25V3G0vB2cFABeOqTa5j9ExAG48rtfWsS6LPHLJZU09Mw\nMKi0VAFd1284eiDMtKXs4f031dh8qSSf/1ADMPEKHVgY56WKTzFawT6HGFGL\nJfuPJPKSgtf3CF7yaTEb4r5GYxvGuuBQu+0usXCY0NdyelfJTkitH90olpus\ncFIzhi+mnSdJMWtjhTAo1ZHiQ/qzLN1Ob8CnA1vRsNKxwKn+XR83F9PqsTCj\n4hxEKVgwzwW25pvHiUHkXbz2oEce83LZz5E+f7AC86yTzwSaWTHjJS5x1Ycq\nZApwsckYWHAwvrbSuCWBDMNqX8fPg5QTS1qHk5jLgbvAYlJY4T29y9yWcYBC\nCTms\r\n=TFXh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbGZrvmW3uhxBzTgu1xYT9e+7DL5F7UFhz2rotvubvmAIgXDKaroB5NJIcVx1rOj2Eg8bygLC45QjD0nB0OOjS+UU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.3_1576094207391_0.7741105062991287"},"_hasShrinkwrap":false},"4.13.4-test.1576095338506":{"name":"ts-toolbelt","version":"4.13.4-test.1576095338506","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"fbc07997f7fab791fcd43f7ea98f4b50be3aafb9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.4-test.1576095338506","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-EoJuMipLV8gPYgAIfbuPgcSJzQ4CJxqV7rriKLWeEnECHfoKp9JXjpFYrYEp7zCJyu5muffcjONFUXMrp68LDA==","shasum":"82a7564df96300740d08f55a0a22ca3011ffddce","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.4-test.1576095338506.tgz","fileCount":6,"unpackedSize":319568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8U56CRA9TVsSAnZWagAAHOIQAJn1gWCoFlQb/etbk3Q6\nTtGqojk6ddGxr3rQXCqW7sPXbwprOR6UMphsJedTywSDMo3lRMtHK+dYegQg\nZQiogUEag9Ki/hLDkhsrBme2fLGyuNe3EguFg6yBIXkwFCAqK7JYdzhIqCe2\nNuUCHEq+5nnd3Xt22+XxEGxLw0T/HbdEprEtKKpgAlBl3kBgD1OPdQFUhBRV\nyUzswOzB/0tngz6+c/wwE6zJ4FBPsk/3MWXFwr7PDFHL2fnQD2V4gjKJorjJ\nfRAYGidN53bGrO3FQHuqeP3y0y0mPGYVYhfiOdrJzTRvddMjeB08iVl+3AEp\n3hFDezBw+qVE+gaW3FwMbLscv0tCBuGDmAEXCpE/PBksfU+a+pqDrjf2pROP\nPbKtcJKHqMquqn91XwA1BSB0IjSaB2lBj+UZeP3TQUe0KJa49kvRfY4Up2Ew\n0QqfvJ2k449nvC5TnN+wWc2IVqOalOv5GoXBbpey1yQMxf1542U+u+z4oOfP\nIMHx5dGe5Jhu8xczAGeAdF9GZ6QO7Ipqb7Rw90WLnIc7wyFEfxtpE7Ki275b\nYxJGU5P7b5CpvsT/Wwc1rv59pTJfdQQQ3BGApkja6vqgx/tkIq0/W4VvAwLE\nbAbzRXyfJEp/a45mFXjtirxzhxBDMJFWLlV1heQ93vJEAVGa1m5fC8RpUx+S\nJlfM\r\n=94cI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEP9CINOP4c7om6j7ok9w/qtcfqm80LoZoUtPlvNxUO2AiBuZ3yawxP/LeqcbFXPb5NdC9GoH+IXwBeSFrq6eGgxjw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.4-test.1576095338506_1576095353950_0.855431305986839"},"_hasShrinkwrap":false},"4.13.4":{"name":"ts-toolbelt","version":"4.13.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"fbc07997f7fab791fcd43f7ea98f4b50be3aafb9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-LWvdHE3bK3kIimgUjUiA8YSbeodoCG2csWD7fkDNHVsprUtMKn1cyZhvdNMHZNzkCagM1RIMVvP7vDPMABppeg==","shasum":"8553a298dd18405e941353a5ac448eceee54b75c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.4.tgz","fileCount":6,"unpackedSize":319549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8U89CRA9TVsSAnZWagAAeBkP/0Xj1We+d/+fZWnVdhjV\nPKkyEVWuDObDNIZfw39aJ5aRBrF9W2tZu3mfCQQIWoQ51HSNlZxVEslj+q1C\nwKGWgp6AHo7qKz9hnTJQUDTYXRUmG3ur3m/xrWVuetjMItG7eoqG8F+WQ1od\nPpmUrCCjE/cZPUwc0hvDjMuHsxSriW74xPZZD/e/Z8QxAbcjvdZa7nz0Jot4\nsL7DR/66Nm4Cbz6+ITKZ9DbJQtuqYK/3EmJUTJqK7gwyUnuL2SkgqzaMaFlF\nTri/6qcZCrzGdA303BCSt3Zbo8dibgJ3UwCbcZ+lZIuMUf58N5G61OlBKIfs\nxAerpZD20PN3pLySEXs+IfBuQ7rc/OMpYCv6DlytXrybFAIFo6ZS3YNBrpBI\nrIrRQ+t8ZuBdk9d/MERiCS3mS0AzTrvl32mMJvXaFET5ki5XZ8QqXdR+6aLj\nWe5gPv80FclYV0m2spPlzTZVLtY/WMxiL5a4TdjsY1q2xAA+ktWTfAxfI7VW\nfE0sJVeuN45j1QdiLDkjEdQkKB7Y+UamJB+I1qsUD8waUy7spC1JlmCBG0I8\n4nnEBs5QAQWyUd4mGG+xOCBUVwV2x8Z0W6RGe15DZd0z2zuNLOBcY2O9TC7y\nHfXTnb48lTH853I7vjVoJpQDzt3xljhbF0EXn8ywIQaXs23tvaZk7CZtsKFN\nczU2\r\n=ym1A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJCm4QSdyyINccJ0twkX8El8KJQvavNDoYlmmvsQME3AiEAldUYgkVxNyPBuEQixMc/+7P4dV0pLINGSNC96pzrGi4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.4_1576095548553_0.3190189563374346"},"_hasShrinkwrap":false},"4.13.5-test.1576103901528":{"name":"ts-toolbelt","version":"4.13.5-test.1576103901528","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"bbc6327383bcc2f65f8e284f9ca2f234e5b22afa","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.5-test.1576103901528","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-TTHaDbBymjiYJ/rRDT7i6uqKhUbYy+Iw8B6E3GYRMAWH9hG4L/6TtLVgiweXlM5s4E3UlK5TVmiWiz+nQmn3Xw==","shasum":"5b7c54070fb88926c816b5a6f4796877a76fb909","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.5-test.1576103901528.tgz","fileCount":6,"unpackedSize":319969,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8W/tCRA9TVsSAnZWagAA8fIP/jmr6zSbnv+459DZ+Ovm\n5gU78Y03/Rhgn8X5gh3WzJwy7IlMCsJCnDlvzA0uprk8hh8TJOsCvePvrEAT\n0HpZHeeRREtpN8fVOUDQvXnT3QT+qsXkVoubsRK0pc+EQEEiWDEX9QJaEfJd\n+RbL26TcI4jSmLjFg7JN38176rQczzGtsRVtdqKe7pCJfscrPE6rLtw4fHV9\n9vK5/sVxhdVp4wQ6U2iswp/29Cp2THV0UMaywhbDViDJyqruv8l+p+9cn4dQ\noagauT+4mxEPOfysfqCH4167jJCZLFRaogriwuacts6GQuedbIpXtFLKuNFC\nrAOP+qdEaSYgE7aGSaCr1qfjbIP0+UHTxq5lmtGMWhCKsQvYjhNCawFnfAPF\ntUNqibar4ACtx1X7RpPywTMU1dZ7jeu0rPLdlsCax9wf6fFymH4/PpZx9OLE\nawGMQ/bl0Kkg4+Y/UdpGVhCQO0furOh8zJrsxRNuVduWjpz6Xc1TRUehH3Ig\nILuNAxL9w98H5OYRcu4NbTOPzeQI8AhEyi9gzaPZo4PYI3gsHa38MPa99WKC\nzk6jJTn0qKnl5xbQeva03uXkOW3YOo01JgrVsNTbUpYQFN9OLXAZJ8prNdE6\nH5kvOPoqJwImEnzSXaEArwJDmRSKVAVAmD+xpG1AhqztdBDAzF2rvI6UjRPk\nNdwz\r\n=WLUK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHEl1QxIarLvMCo+pB2cojmcxdI0EuJ78iptn/Kbo5UVAiBGMnoXOWnDFTPdBHq1QvwT4lvUJ9zovcoxrhQke79qgg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.5-test.1576103901528_1576103917023_0.5354661887529901"},"_hasShrinkwrap":false},"4.13.5":{"name":"ts-toolbelt","version":"4.13.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"bbc6327383bcc2f65f8e284f9ca2f234e5b22afa","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-qe2/3hXY+wyKTt4Pge/YKkoOED2UiKbHgZgEb3jkS3KBJVyVWMNyb90Kzp7C3KFWcc+QkeifNO7MRwXWhNW+Mw==","shasum":"0d05d77a37a53d871502a44967e472ba1550a9c3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.5.tgz","fileCount":6,"unpackedSize":319950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8XC7CRA9TVsSAnZWagAASn4P/0M2mhWFmg1gu39XCtS4\nQEyE0+Jn3MtvLgJM42vLiTQflgHmfXTB+wWtjn31gDnEBWNk0h9b4L28N7BN\nckiFMX8x2flGwh+GEEWJ+HSvYhx5AAiLQIbGMWuatELFiYV0StHFQx8BaKLH\nmBeLuhuuziRQgps1vzfroIOVEcgiAquHUmBKBJ8NcKwmE/C7o7AMTz+9sQ0/\nmgJaL4ukCqrrpBsl3B5ZcS8d/zNYr6ziupPl+EDzD2HEqpzfWicDPQv0+pZF\nHK6f2xbPGYVjung37mcJkwzU5BMevDm5PWeYlVz//Galq8Q9sN5k+Wx/Vy09\n3I56k8bG951Xyc8H4tf8je6Pgud1UBZYlyKGP3UwrH4nHIeOcQku3JzdgLjS\nkSODWCLgmc0G72FOcSVCHSJyUYlNYwtDa01HwqChRHKeB/q51p/7UKBGCVl3\ncf8FAlnt66lRCx+yW3wgkbv05ASbLd0U8gp8udT4KirXIOgOUiM1FUuDqDCJ\n7EC7knOcsZJpiyaENE0G7V25py27MsCZpR3eHbaqdOlhOOaG/TmL76bVjk3y\n6pdGPcW8RplyyNBqg4arwj/gCerwaDRcxwVg51IHKlzcm08rbPGabWnu/R7v\nOL12Qi5NJjqkFilF6PondHQWNmzJrV/qVVBL8z79/OmqsTsSXoKU1jZXDg5F\nsNj+\r\n=tNlB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwLLBdDcQbDUW5Vs2l0Q+MKJr2b5Cx44s5zbDCY2RQKAiBkzrQOKtVnnwJS6MiuPrPOBIFkyRhQRINl2iFi0rBDug=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.5_1576104121987_0.38516274240656334"},"_hasShrinkwrap":false},"4.13.6-test.1576527530033":{"name":"ts-toolbelt","version":"4.13.6-test.1576527530033","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"29e7719b517e7ec036c46d3d777d7b2b9da74e06","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.6-test.1576527530033","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-eQ827Dnre06j1PhXMC1lyh4Hhpek8IgwBtRXBiqWktsYDevrVL2S/89JnNo1X48pBtxFLK7l22HA1Eo5XQ+FtQ==","shasum":"71600acf910834b722f8f15958166ab150d6d5a0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.6-test.1576527530033.tgz","fileCount":6,"unpackedSize":320219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd9+a4CRA9TVsSAnZWagAAazgQAJuhHQdO8i/M2kDybBEg\nL09vwjXiWbv0j0yEFovlFAk47ul46GOOXXNZ4usVYeG+D/FzXHtVtOya0hVx\n3A5LqKENi4/en8C3ajftsVVVA1hU19Xmrr/Z2YwOBbxdhJHw8ZEqOwopLXQY\nTEjMaaW4/ZXE5Nm/pBjK7SON8iJxPYIRH7VqLaxsZi+qkrn9TecGPZg6ijeD\nRUS7mj+GPhn+PR+MMcI8SE0tx7sS5C8e2t0oj9V5a+dGFb66YWP4EmA+Om9p\nH9gsKtzvjjL6Ronw2BLgRO3NGHEHKcevvHxJoMuO6pIZZOjN4WLgL7Wpdyk6\nhDGCyR96kVtrEI/pdjSIj8h6gzfcwhGIIqn4iN9G8QaHofbFLbS6st+/zDcq\nzeVDP49w7ySO8ZRdmYgH5wKx0KujKIg6lKmGJJ0j3W9u/2t2OsFLyDW3qQHx\nP2DaD8TM5cozmA//ipTVQvZJdrNrlaQPhjjVL5rJ9CDQo6sbL6m37Dy3XHcj\n4N+iUxpc3q+xb1FETyAMf6MUUqRZJZFbxRE/ZSBdYzSr2hJc7DdAII8l/9ww\nKavdt19xeZfSNhKESaf0Ny1Qzj+AYq9eVLXeWKKFYEMa32epvD6rI8LBOVHR\n22UG3lahkUkaykjD9BHxNG4J+I+R5GFUUjE7Mke9YLF9e5A/HcCXal59AzGI\ncK/B\r\n=5tVF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH2+2LmhqIgSC9cJNBgDmLPzfENEmCxXgjBzVCUwemxTAiEA/2fahX0DO0Cfw8GF+GQf/4+wP1luRGoH8+TWtvAg/f4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.6-test.1576527530033_1576527543571_0.6126742318308436"},"_hasShrinkwrap":false},"4.13.6":{"name":"ts-toolbelt","version":"4.13.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"29e7719b517e7ec036c46d3d777d7b2b9da74e06","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.13.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SnUb9AOLI3UaQ7+pZ15+7sp37iJ9qDyBT3d76wMIB+0lT6+a0LHmbUnTaPWbs+E5J7L5kQku5gPoTxSWR3WfJg==","shasum":"961b5b27175d28e41c53b1b53c4c98ead8222f0e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.13.6.tgz","fileCount":6,"unpackedSize":320200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd9+dlCRA9TVsSAnZWagAAiwMP/idcIqrE4ZRGe+Y5tz65\n366sH1AY+dGDakEyLzRvVLP4gGVgt5fWLkx8EHNbbItQvFKXoTvt+MNJAXrm\nr5zIsV2YmByqombKyN1l50B9Nj3XzkSJfXtAvNdLhdBw+KsHP25c9G3IniXV\nIuoVG1GqkrcLepC45jEvyVhtCHzi96jpeKLDMdNfr/c6c3JbOyLIcz3tHau1\nQFZC17+1k6ZCoKgQ1v44YTGjremVC+wFPHavZ1Ks02fuC7UCYjScLz8BKGaP\nkDl/0PPWXtvynUWsUPL61e2n2rG+9A4BCoWzIafS427QUALjJhCrNPs6GUzH\nhoywBL/Ne6S/P8QZ9V071fS+AkqYRb9/2KjtJm+j8fAwA/oe5rF/7IpZKDeV\n+OLjt9Fk/pXF84d2IQgsVbLv9ITgi7UYtMOrwqVHALJLlZIvN/OlLTUKnb7r\nsKSpk89y4LAZC8yLExbMv7pBBmjZFrS5QATVWCddomtDUtsAE6BbnqIJ415U\nmbaKd7T6KgwduIy3meKHxfdUYk4vSMS/88VFYZYsqnhq3ApJR5kgHXJAhxm6\nh5mdmtI6J3bXTC+/I6IwdPinEpQJB68nDkbFEa1HTVJInf/M/B06RJ4m5wov\nU1aekWdQahz/GO9VH72nDfZcgpNPXlaC/Dngx7+phSkS+krrSw4IaLnSi6rU\nlVFp\r\n=zpru\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGEBoyiFLMRZhWQWzA1sQREF+2ZKEGfxmOTrEu9Ta2XGAiEAvv9Z2YfsjUfj/PeJElwBpouJqYdDf/T6rKvR0Zpnr7M="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.13.6_1576527717003_0.42367398338671336"},"_hasShrinkwrap":false},"4.14.0-test.1576592501680":{"name":"ts-toolbelt","version":"4.14.0-test.1576592501680","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3781648c26f27aa1fd0042054d6afe2ab6a981c5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.0-test.1576592501680","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-bGXMApt5BcBH3LUwwR7O82suBm86XZVaiOl7Cy16bqgaZV/af8iej71ooS7JKCPtbmpAAHAxfg8PqbrDcxKAXA==","shasum":"8ab7ebed163ae70a8ee2f9c37cfd67e8451d3a6e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.0-test.1576592501680.tgz","fileCount":6,"unpackedSize":321250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+OSDCRA9TVsSAnZWagAAb5gP/j2PEelSTIF8PhMUKfwd\nDeJvVqEMiS3EZLj6Ffd5ybsDNW7UYJMkvT3QVQ0I3GNL7yaH7A71pbT7u3qN\nky3scNiKjF4AalK+Etm9V4mhG64NACeqkSE5Eo3FbFdMQ2W36LnFAR8/QUTp\nfygS7JtJ2T+y9Cm0W/c5GvAXNw76x0YE/ihVuDdUIhXYU/OXPEfeY5bOgU9L\npI0WmPGgzDVRPBDcvS9hOHdc1PdhAWHy/lUIrx1w2eDGhEp4ZiiHgu4ESHxp\nbYueBl2aOzt7qX6frNT0pKcmcv1633b7LyjHdTPUxqmUaxd35un2QKuUAxC8\nrJriUhrux0SrJIj67O/DxNIbvn0ir8DZD5HBEE7ZNGueKHIhnCLRUWisBfM+\nYa4Inp5qfG0phNDt/Prurd/DT1E67jFMtQZ+VKsOHvaETPAEh5j6LfsxHguC\n6TtTmbrxUpK9yKQCK1kGvZ6pd2oa2SOjldZ4QKXVo2yR3UuRCYTxPcphmH+S\nBNZKK6sp8rqnVLR0+iVyqyQeXXveFCL9T0UPbfzlcokRUCn41aBY7L2C7kE7\nBFb/+IHHx7opHIU83RuAMMKArouy3wcFv8iaAhPEgLpUGHBr7V5QhfakG6pk\nyI6dfxgmXoRPbrsUNWWEDqrtbmdxdAOz1vVPUjmYVdsuuIwQQ92tVXaNxzaD\n096P\r\n=ds0m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUDHKfPFW5q8AbCnSRaR3dNhT5F/Uj6lTvWstJkwgrmQIhAJ6THyzJJJ6bvFQ6NwXEps81uBIaO2YULEyV6X6T4mAA"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.0-test.1576592501680_1576592515163_0.5323693277236083"},"_hasShrinkwrap":false},"4.14.0":{"name":"ts-toolbelt","version":"4.14.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3781648c26f27aa1fd0042054d6afe2ab6a981c5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-MZzo9lN3hj/ApO4Fqy8nasv9Cr3bauS2JGmZUJJ1XRBUS02fAZklbXdVI4Yz2ygrizFfww5Xs0zlzcKXYVSquw==","shasum":"c174673c8d2e1d979ab7508d4f17a60b56ff1869","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.0.tgz","fileCount":6,"unpackedSize":321231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+OU4CRA9TVsSAnZWagAAzKsP/1dicP3yszMzVCPz3La8\nXQlM6UDp409NtvhVtV6pycAwpHUx8bA3V4gnIirDBQAayG5+3jGsNnPgODdw\n94SQuBXqNqm2JZila28K4/MrUxH9WhPoFk+NNaJBAsmFw384j6+Fkp03w4qG\nFdUEEN3skbrkrH55qieZ40Fkm479fl1yWJEzB5Cex0RK/qdRTCQ2RUyUOn0/\nkIx0OW+7AzjCjs+GsnPUtKFa8F6Iu8X1kqrpK0bTL57Um9Q7ur7drYsIputh\nC+iqY0LeY7QAgaj23HrP9Q79XLJrbld5axT1D0EQkz5MlSh6R7zpRztV7j9X\nqmH4G1mz86oNpVvSA8u90mdh455FvTOMhfXKmO6Rkf153hFNj+HsZAoHEx2u\nsDhltsvT4MN8En7hwLqtdjhOhLDtJd3ItpzkL/npQZ28kvmtPeWWpIw+VUUv\nxnmUFvfac3rB+5JL2NJYkRZfkL7ONXz4pczbFwllMGs5tvvtw9LbN/Nd3x8X\ncRLDBSDKcWAZoLM4bly472lty9J7jqScnWYfi1HXZ651pATAZRpWdptSFkHN\nDwDLCLqaumcZjudGXgQMvdOaqgbnmx0k2k2bMKRy8np4IayY6WVcI5y6ZJCX\nFmh+3Cf430Ra6tCy1AMaa0aFtWMCzN5YjId1mvddQ0aX5xEsyrraEpSXO8Z0\nVwE9\r\n=tuBo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGWG4pkTTGRJyt4Q1erLP5WZ9sqd8Q2i/98jHRjDidbAiEAyeJZspINeTWOjGWxTCPbbdd352ZZQJVCJWKOut/hsPM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.0_1576592695809_0.15596812010719607"},"_hasShrinkwrap":false},"4.14.1-test.1576606763178":{"name":"ts-toolbelt","version":"4.14.1-test.1576606763178","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b97fecc11c6ba080651df4ad4dad6fbefbf00049","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.1-test.1576606763178","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-eH4b8qVqM4Hw6FL/i+cau6WAqb69ag0cGeJz6Q7yWN7o126AnDPhuso7g2hkKrzxIHw+2k77dq8ThT9dvwlu8w==","shasum":"043a037b44a06735292d04a3fefcbbbcfee6a4a8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.1-test.1576606763178.tgz","fileCount":6,"unpackedSize":321344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+Rw5CRA9TVsSAnZWagAAdJgQAIRKJqMQUn2PT4ajAM21\nL4diBVhshxZbDlv+I7hkpXT+ebIxjDDLLc/aEu8Mfr5AFevgPdq8JYYsrWwm\nDThP0bLqOch5Dm8JtzZbcL30FtcJdtnSVcJ0AuEvdUrG2LJXIOTKAXGomikR\ntZ2wGmBSm5GcAja0OzLGYm0Mg1yNY9vilF6JaY4+Jk4WQkv2/nslq2kKzfbT\no65vH7O97ZNPRCKmoWeujTIhRNQCxMpWmTwv5KtAeVSEF2ztc2jnHZvQCQgZ\n04qCBaD7tikG8COYiSqFUK00RaycbVl1b3j0zRj4mltTmAM2ZKMpEs6Ti+7N\nZa5eXZCaFzaC3ebh6X69F9WPqwxD50nBkRAYot7IRI4VClBaovK1eZrbHtT0\nd5/l4jQRiKHHevMyfzm5kLITTwcsLkpveEoAcihiUFPzgPJhApWNCpMnFiy+\nLQej14wSHwEHiH64kJKm8Du/C/cZKMqWIDoe5pVWHlNlv9d5sI3GowsCGakD\nMJGkJuj4mXfytrtd/ZnzzSGdduETr6Fn6Xx7GWFRNnm5OV28WKQeeYjOSFCa\nrAxZ1SHQIAU2CIikTzby8LQl+RrcrRlZWVNqBxwMtcqfJaCuDepNrC8jDVh1\nUZQ4z4kLxYswuJXIoAH1FC9nvnVkU915MtalARqTZ9KLpjUe09Z2FuERs0KE\nC6CL\r\n=P05K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/H3AKMXDfmhZQvDYNrIs7D6TLBJY5qwid+eB7RIlweQIgC4mAlsUFcbZsHPsnnH64IEW8HiKHR+WBEbpioywESe0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.1-test.1576606763178_1576606775853_0.7842817066436936"},"_hasShrinkwrap":false},"4.14.1":{"name":"ts-toolbelt","version":"4.14.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b97fecc11c6ba080651df4ad4dad6fbefbf00049","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-lRyB/YY7dMm3S07klRhdxC2tNvqPtXHsK73AcVd2ryoVcYTByfVYInJfBh3Wg7Dn8NeFxm2Fzc22Gqq8Of1wvw==","shasum":"171b281e7890de648f15c198444bc32b6624bca4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.1.tgz","fileCount":6,"unpackedSize":321325,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+RzxCRA9TVsSAnZWagAACsMP/1MXREmvarLy9/InjjBO\nT5NW12NC+3nt1VgNHgMIBhaztv071ZqeZHsSiQZYXBV7/nTG9B4lw2YIZ/wU\nnhKcOnaobsXC+Cqw3fe2/smSin22veiSSwGFruE8MhqbwqbjAH/CZP/OeVkR\nbOtzBB9y4vEWNlre4Ti6MYxIpLBBMHdoXx8lXWB4o5eYtRNKyfF/3OcJtcG9\nEzwQSpno2/BaNepbYODfmJXz5b/tsvNUv+s4aW5UgnZ5wN+/mzX2U0qJQbwa\nsPkzUzk4Qo3+Ihp6JHtxbEZsJOBQ3t0fm6mGqVlrPSro1InNApcn1/5sH2Aw\nt+maOi6kJlV0eATlVaTQmSJxd5mV5hK3uUpvnDnlYMOZnBqJqL+6k4EnwfrS\nMWmoIYgaiixDoWljcys9+9z4EcSEYvrs/jqxTCbYxvs3FB0xeJWvKRC+bVek\nySJ5nXbg5iZ5yId4/bka60Y3txMH2UXgXSU0IAPZqxdaB6nyACWjEgAuzSNp\n0/gpkov7NoW1yZKNpEWUBXAlsciHmBy2F4TAohMNcbM7uqsaCwudfbaCIs1Y\n+F3spmQL9xaTvkjvPphiu8oe2Mu6pdq8IQhKcTE6MzGW0cH3dzMal3qaL2rU\n8g7Lj6ItRSyge1b+GMEwNZbAngWaGcKbZwxADFs4wMoJJROu7+jF/qcNKP8n\nMMfL\r\n=fLcR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCk6xlgbkw3z8Atm9tPAiSSXE9nKpaNqfyoMQ/pEE6liQIhALHvnDXXAdlKJiw3x2X6UHqNio+ZZFMcrNUYyRvXvbKw"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.1_1576606961082_0.009271297206800533"},"_hasShrinkwrap":false},"4.14.2-test.1576606974913":{"name":"ts-toolbelt","version":"4.14.2-test.1576606974913","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"59c08cbd134122b6e3f9a9864334b0fc3aa79e46","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.2-test.1576606974913","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-U1Yll/YTsDzaBlxq1IeqH/eExTxgHPTYxFu5dM8CoeZg0TfrlvhbfTy5HxvEABOuxrs7MiyQH5a4v7EmtPy9MA==","shasum":"5c15723377210970572c476960bd771d5df634d4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.2-test.1576606974913.tgz","fileCount":6,"unpackedSize":321169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+R0bCRA9TVsSAnZWagAAcWkP/2l39wzwLXz0PzPVj8J0\nnawSex/U/yjjcwUPzzF3msjXmfHoXw6sm1diAFhrYxzii9acHypoUv4IH6ak\nbUnfxu3TOwYY/VkRCCs2YQCEFvGLh1JGCZr7wRVDvQ6GKxiHvIA8BtjPPR7A\n/ubHwBvG+U14s7tG4apHfStWO9A4WyCP8CZ6iy5a7Rqa82dmdlisZogHPHhn\nagYzmpARBHaQmtWhdRMoCTExAYWdUmUA1WBaqH2yWx4b6dFyP+NRoIeBdgC0\nO1tLFOT5TnviYPXLdzhDNlc5tsyBHXqC1OAQzCERv0HxBYOX4j6AaofBjS6t\nHMZq74jwZtuRDt6ZT8qV+QAem7MszVCQrV3+V42fK4Ar3QNL9RWAbXZYLFrV\ngAZzPYNooHH9FYanHV452wyafpqJmLAWvMHY/GswaGqhPax/CSGTzmdGpoDm\ncNj/TLW1/8HyBIp5j4AA0niyEPw0WwbRqvGyi5TcmTq7LwmeSzw5iwjGuJH2\nhvpouCumZfm3+29sG986C+zmf6RtPr1UlAAFMPU0kb/ajsDfdjFUU9eKTGm3\nF8+Y4dZ4yL/E0MCbOpKZWMpWL2VA91zxaSyuqwOA4R0AdqohNzA98HODIEjs\n8qwaUHS01Yq9Fp0QUt0Tn0jRzoiwIXpEv2tpLKFot5eVotO5EyGWfB72xvm9\nlJH6\r\n=diPe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICEivteVQJPY6PXmzO5VGCJ3eE6O+uzYjP/eJ2u44wmlAiEAtQoeGTYD4mCl14Ndp+iLkJAb75mJMDsw8usc46xElbs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.2-test.1576606974913_1576607003197_0.030565873436682045"},"_hasShrinkwrap":false},"4.14.2":{"name":"ts-toolbelt","version":"4.14.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"59c08cbd134122b6e3f9a9864334b0fc3aa79e46","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-QFW1DPYuPIhCzfQaBqUwI+EIvtijejLnEpFsCIGOfeMzhuGyGCWyEWEh0cxNINBLBHSUqBRmLC0jhr7XkfPXeQ==","shasum":"60a350e4895ca8e0ad455b1d13c43c312c06fa13","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.2.tgz","fileCount":6,"unpackedSize":321150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+R3NCRA9TVsSAnZWagAAxfoP+QGc9mXDcOtA7GG9fAVH\ne/3sWj1csedJKzHCYn2PTWqYtC5kxzq71g+vMob2H6VjuuhrvDUDRJzxhDf7\nzu9XssFLtfPk81CdEehmxfCu6zUXlJII9TIKPrejgVybFFQtRdDsfkG7X8/p\n1AKtWyNktB/nC4ezhglS7+8VWB6HROkvlR2KzeC+pC9hYJcgncnU/j0czDan\nWZZ9IEpeYgzaEYr0QWHGavNaCKqJyVIeGRxMsxmotgfxxWc9tfrG39JLvrfw\naS0rQEcc20QDhYd+7NyX/qXbPap9Fxnbhc73SRe8iGEYU1oAosnKcZBSHIJP\nSprCcl/J0a2BM5ZNAc6ttxpa3utxTvJMwFWtubCvgh+/yGYL/tdjK3B33ae6\nZmKxJl/XYyseQ48V9gebCC99o1NgNvGfLe2HAkjl5H6wAuY8NWu5ddGJ6nG6\npMhBl0xxelB2JaOasrB1qCSu0dYMu94sZlv5bAaqWCTleA5HkLHpCfdrQ8y/\nwxUTApNZ7Y6CwxopuC1lYdL/gRU2XJG/JC0f1+7GNhFARwsdxHcd3Gj9R0B3\nX3rV0ouv6mTBMEMnLAVat6dTzkB4ufXjeRjmJ8fNjHfqfGh8PkeIHLoSsOr5\n+WVfF8ir75pG5JTsDRsDMlMEwq9Tqo4ByqYgxaZ0gYtS5GD+BudtdiSE/e4N\nbpfF\r\n=8/am\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKoZq/gl1t1VJ9+4YXWdp0JaeBOJsK7A80lusiCtRS0wIhAJR5iIQFOm1UTo2a53bIahHAyrucfZFkfVjDeYDnov3j"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.2_1576607180949_0.33881481262121604"},"_hasShrinkwrap":false},"4.14.3-test.1576611456785":{"name":"ts-toolbelt","version":"4.14.3-test.1576611456785","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d57b63890ba800df1794b61b9bdaa81f174136c4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n// Optional, recommended\n{\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.3-test.1576611456785","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pygcecwbKmdcinxAwXWu1m0c39hQlHUm51EtQOl0P2dkrrzAnT5ny5RHI5AMF/zVHU8bjn7bthVarjds3RQ1Ig==","shasum":"d6b18f2b375e083c95e1e79dcdc7fa73557ebaf1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.3-test.1576611456785.tgz","fileCount":6,"unpackedSize":321617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+S6OCRA9TVsSAnZWagAAgFgQAJNU4U6oZK3EOvy2MYzE\nRNkvTU7A72bmSmMcBPrILZUWHmghgIQrfHWM7WK7XgmRnqFnWHM0hqu4TfB2\nt0ZqIFzBZEgpo+Ddkol24zoKgZlIwfOmiPF337VNZT1xFMs6bmxeLRptEFZK\n07MuSiT1833blHQjhPkebH2GoW+mtvJhuDJyAh7GOzfCoAEVmp85MFCN5YK8\nMgaUHAhEUWQaonNO17SKjQ1GYl5cy0bScbPC755oIpkrbsWhcuquT17JmJ2p\nDE1EXqg8o3EOQLWxd8DG+J5gOHL8sSZXmKt8/EjLALAa1xfc7+FXKhXz0I8Z\nIqu9Tn7pPJzPDI06Y8rKwoTLrElr0BYx0tI73Jsa5uPRp0BK2kSh8e1h4jQO\n6PYj0Ui+EXF59N+8VvWv5yIpKuGVaGN8AE+LIGzneRcnQyiQBm5L8jT/5O8n\nyssNqmxBqcX7Qd4RUWc3YGavjLzfNdW3w5z3jKhhuAuuiEdQNjxqUDOoLq3Z\nOrrnkP3XxsSyIqhoBccO1kcY20081nM7EorBBD+oRpWd9eaZtEQsmQDHDWql\nfGJ/IpWbtOjnTo03zm5N17mC4YsakRvATxBuNA8p/gjHtIS579n0y06Raxdu\ndkVaODM/yUmbmC6NWD7UIoIn9AKN/7/KBAdw74Dp/yhcknKUC+6JLzyHLgaO\nKIQl\r\n=o++G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAb4GXuPn83xBnok5UfizLqLS4TLOUcbMyMSZg/hnFQjAiEA/JkxnXJ9qy0UxO28iSL3MZdUq8yA7UE3mUOm0SUWbFE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.3-test.1576611456785_1576611469911_0.8383821269649763"},"_hasShrinkwrap":false},"4.14.3":{"name":"ts-toolbelt","version":"4.14.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d57b63890ba800df1794b61b9bdaa81f174136c4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uSJaY2vu9uSk1LQ9d7zMIGGbp5utmCWOQMFxJLw3tM/bbyUHjC1p/t2WTMJTR2nqbgWCsfUn+VF8q08IHpkCRQ==","shasum":"4742a01c3c799ef26eddb6b179d51390e2903422","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.3.tgz","fileCount":6,"unpackedSize":321598,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+S87CRA9TVsSAnZWagAAiP0QAKD6civSbmDXAdLIuTCg\nOJ3J2cLUfs/bTR5luH4b2j+HB5NoExMuAoDMtBnt7mGtQywcRdERHxfhpMQ1\nXCasnbPcIFArnovWQuHrby38tP94CsRWWhtmYVBnW9Pz6CLznGlWCkVawYpA\n8QGkvbKnd6ItuZJQC7HbPuT9O9Zk5o5Qcofy9yHB/V7tAEezMqPJ0EMPkwPZ\n2nT0TPqs1LygXJFPBxvZjYtREqvWsOsXUWyoElk02SxCePEpsMamQ5MRqTBq\n4DT1RdxcC1cVMgVX39IaE4tqcaPMbZk3V0vNarNQs3UdBnd0Z/JPp0QLgbNL\nDfKgOhyB7iGgKrj6ngruIwtS/yRiZyKA5v7AnVBeKQFkpbT0QssxDHlCpzD7\nqZw1y5PVAWXe0Of0Bp4yIBnSOruE3PRBAJbL8gMMf5Lf+BqzNcjDgB2vaj8i\nIo3sX8xuvHGEMds5TKVWq264JQvOF/SiTeSWc3/n/wCxjDkNPns6MUdD4wOC\npQYWf7N0/AfqpypcKecB8AzrXBrJLGCOYMSiWSovq28sPhAXnaeFRMIPt3HU\nuinbmvzor0sla2cmqh/eqTZYJOQmU4sIu8Ob/H8pjTnA/RSHpQRQglcwue03\nRc6zJUZSJ14qFDXgB1loHauEwSFR27Ih5PlyssFa0ZFMU3leqNtzUWNXGh/7\nqTt8\r\n=Rioj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1uWbGK5HB5tPBwEOTA+3IXvO61uftmzl2ZpprRD2uMAiBX3tNJya3/bXrrTxJp/em4bJfGOnqk1lzYXOb61t8Jzw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.3_1576611642959_0.14477950271208218"},"_hasShrinkwrap":false},"4.14.4-test.1576702871035":{"name":"ts-toolbelt","version":"4.14.4-test.1576702871035","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"f11494cf6070c3f8a3029226a67cf23d320b2079","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true\n\n    // this is optional, but enable whenever possible\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.4-test.1576702871035","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-G/DN3bQ0CK1nI1ndFRsEEqFQ20i1NrvJzU/oCz6p9WJP80/GUl45E5EXVkq+f8MK7BNPm+ymhVu59ybpycSb5w==","shasum":"5cd1ee8c9dcd5fa57eaca143bb541e9b4732d02e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.4-test.1576702871035.tgz","fileCount":6,"unpackedSize":322551,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+pOkCRA9TVsSAnZWagAAYRkP/RB9w+96ZRULmm1TuQGt\nhfohX2gwHblpPkh93BOPPIbuQZDderXZBD7ibpWUi3uF3BkrzsR4OMN8xPK2\nLNfnqtQ68n6EFUX2FhfIVYFd8Q84VydaJxyvTcPcNrN8Jeye7IWbxK1e/uK7\nF/KlbOpzOlhWR/GsI6gFRRlhckLueMfzwPHGjQNhTGuHdg6ipe+78ThW+BWH\nCPxkrfYsZ7YGU9CK1pX6dbyoWCTOPWJMF7lSznkTdDuBaey2G/wx5np3kLdS\nJFOtwbAGuMKKCv6axFdBA6tXXjVfai08+xaJP4l6MF0ayF2QcdNRCsgLjia+\nbBSjKHdlY1890F4DSva6cq+cXiBCY25PBJGZCvTCat8qU+YVBfLpxDoYSk76\n0f7tVCRzCiSVY6zQEger5ikxL9nB4iTSe3okQozv4BCEFaHzIdtQIQi599vx\nx27hJIyCc0G9vNUG/noVc8k1mTXP1kt4eeL3fjbStfSkdkJbG2EFAQ7uuRxD\nF4cJnvKVccDRn79cP3MbyPCvp5FOjgX94ZHL7OB/BjQBlAZT3QcBg1yXgB2t\nwYb6dkvJUpmIrK353BXjsvyCH9S4fpZx37gb0ylScRRFoOaVA35s7lJwjQ0M\nPQgR6BqUPLNOTAJmDivwbrdpcohnl4qrY6NMt/1zPEj0UcIB3gDtB49H1g6Z\n5Y6V\r\n=hTeI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM1wV1NdCsso4N5V6zPGTeKwcnz/CjMlxs/lm+SNNAAwIgfSzQubp27NKl2JQ+t78Vuqs2k0KS8ygLZNOEkQcEwdg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.4-test.1576702871035_1576702884407_0.880838162894042"},"_hasShrinkwrap":false},"4.14.4":{"name":"ts-toolbelt","version":"4.14.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"f11494cf6070c3f8a3029226a67cf23d320b2079","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-he8VN/Bj7gKtjLUaBJi6bVMfwycDAhaiLBUJZPGo4C6gYPgLxXJFBa0eY+jX3VJWwiIkj2EcyPIN4EqMVuZ4HQ==","shasum":"007ed078271d299961d551b7dc94340a0b7d4a12","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.4.tgz","fileCount":6,"unpackedSize":322532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+pRXCRA9TVsSAnZWagAADoUQAJtcyCcyq7Cka1xAx5pD\n51DoM/4qUFDWbPGLA2NwMzIy7TsiH1tGpTDe2ehtdjrDdGvsrDu6jM02t+J2\n7mdANTWt12dBVjjWsZ9/U0iMmTMOQfQO7g8STiT+f4726BadK912z+yNtj6k\naE9uRfyPHj5ENJnI0yhN/7gitrZJXqBbA+N8kMsmPSXn84bENLXSDAIOLbol\nxiqGR/hX33nB2UeXq8sguYe+twa+Uqm1mOtcWfDkm/Ek12t5UaUmNZdbY4HA\noDtD3WGA1lLbuTN7oshyd2jezUgx0Tt5IeuuPA7K/19gZIEhp8gIdOMwPnU8\nd+jvOjWRFxt0TboGMtPjbv6bzlMeVWiTEZ94T1wKDh3W/LiAKy+rxuYzKQ5D\nLADTg7wyq88/XXo4ryrEagG5cXZE5/b2MpnPoHXFquvFN9zPYnFfYgptCuNT\nDra/mVp5OaFQlU5Gc3vcBK2yDTKIr4Z+304aAdJc1a4Xz3fm/6pAVBjX+rxD\npp06O087wJx/bKyJA9hywsNutoFTsADyS0czcR+cD26luNjWvvJmJNfwdI/a\nO5gw9hU7bTZ9gXulcKsqKf0Kw1qacAXpSz278CqZwBEkNtZ+8scNYALvFv/A\nYTgd92fgXLeLxID7pJ3CBj/tW2zIO9qwxiAP6Cuk8DP6jeybySImDXPEE+jC\nUV9m\r\n=nLzm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgw0tKE5PRl5cD3IeicjCA2zCVPlbkaKdA+y3M5DHaTQIgU2mjfqpcmQYzM6UYrgiOIREBIGDg0mRO0H3BcAynkHI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.4_1576703063179_0.2752878372118366"},"_hasShrinkwrap":false},"4.14.5-test.1576712898929":{"name":"ts-toolbelt","version":"4.14.5-test.1576712898929","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"26b10a59e243e076043c6fa839d0eef889f72708","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html#merge)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html#update)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html#optional)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html#update)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html#concat)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html#last)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true\n\n    // this is optional, but enable whenever possible\n    \"strict\": true\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** match the type you need to work with with the above\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.5-test.1576712898929","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-t1OK2iRIQExpH9tC9ekD5gdDaiD+pOnY60EUBpSgpECTqSd+bQPn4r/XnFOXu5WfZzJaMlKMHrllkMueqdoEsQ==","shasum":"da79574ba2a5987780964da40d4887489a4e4c50","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.5-test.1576712898929.tgz","fileCount":6,"unpackedSize":323113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+rrQCRA9TVsSAnZWagAALh0P/jgXLfo/Wc0loDg9wo27\nFKDNsEBzee44ZG/F8EyE9j56vAlqod0+J91ONb5oWtPMfDmylcD6FhakOhln\nZOvXosnddcgVG+rb3dccI2bNh5HQdcacVKcfexEFP0y4SoaBgLVjtzYFOC4Q\nabj3cQkcHk3TVD6beTYACOigcPv0zYp6xDip9W9UecRLWIiSnOg3Isx85NCE\ng2QQetrG3PTzq1V2uGzSHHGDEIawllmmhfKFltrnLH48aBwhQGBW68X7Jcjn\nSbhBIKDf/4b39yEKYSB4Q572qKRH+vtJWY09kNxRddBc3CsJb3uC8flna4Db\nh1sxWJKwbPV7kjX+poFhyIlZANrknmxEFtER5RqW0wEh2E76O4odJBTFhOpc\nHPEzaaD7BdLB1fz8b5HNFcu7HbVKJQvKe4dm3EkC5sTg6BlZkO7bNHxYamod\ne/LuJL7hdJ6vEyGgDBGZymW8vHjc1pfqtu0U5fxb0IYA9oaPSsBIJpO8nV0g\nJbq2UPzdqB27IO5Vav8Ad7C96btHzqX7oiQStNL63Ono28CI7qzQw3K/x3kT\n3YXlY9CiIRDXXp3UrGwxXVOIZBrAZM47ONuQk1AsKiK/xfh9IV0ogvOSe7j7\ngICLbwoQhtlS9ZmDQ55SRnwa6fZVNkKYn+0IG7f4VMa2dugqEhlJj7jQTuU/\nGtqc\r\n=G0kz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDI8n9dn/Bh8ShudU0EvuXBlB4STqbW30WBGdFfT0b4CgIhAOVpnt9yv4DYsGi84eh9dkHoffyZNyQFmg6+PlNd2bKh"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.5-test.1576712898929_1576712911687_0.7795272044635086"},"_hasShrinkwrap":false},"4.14.5":{"name":"ts-toolbelt","version":"4.14.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"26b10a59e243e076043c6fa839d0eef889f72708","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wEy8LX3vElGPT2eKj0f8GxGM18Ik8WkTQaQX64DPDh0qW0RUY9+cc1o0mOg2GknjSxiQO7mYxw/YiCAzOFDMHw==","shasum":"a12ca7dd22d5bde4fbc907d8e02c5b7f74e874e0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.5.tgz","fileCount":6,"unpackedSize":323094,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+ruACRA9TVsSAnZWagAAIO0P/2pkijMyTlZW5B83/40Z\natq9++651PGqCk6v6PvPRfR3vhNgOZAsqWDjgsYDgHV5QryM+qt6gZU/Wnzp\nBDszY1HCrC+Jc4U+XCMzQO2lo3kz5aBzdRyz1WzlRmq4ij4IjSLYD5TU5CXZ\nEdfAYpC9QNRkhxMEAXGG+n9cAppyI5IEqbJ5KkElgw1mN/XhPm9b5P0rilOT\nNg0+9atV18NU1mjiRlAuSGxrH8PpQfhuBibxp5AHYozDR74ggI64oyT+gCia\nSr+k1kqSwzEVaBw8srHjorlrSlADMHo+Y06dWAPzOyQWktg8neZU6Lb9bl2L\nbsIFC8vmTg6ujX3ACJ5Ab0E3wzGl0zAH9j8uUOlvje8ktrxGl/7kBPLacBTP\n1Rx9jQny7jzp8plQXEHMB0jUB+YXfzL7Y/vMkm1CaLpF5nA/J5KuImGPBEJY\nnQacePWvcE3+b15O2tnWmknJquT39/rcqKYYO8kz1BmMbsmAV7rtxmnXDPNk\n5ErvIK7GbG+niGKkNHxiLDHb3SxWpKAx/W6fjSsMToAiGcDw2oeaPl3CZxHq\nB1YXtNNrRtL7qze01SbdxB+XKkysERnHSnNxXAITFmcRql5lArDsiNw1sAZv\nb5x+5JLE8GsE7ywOnlhI+6NJ4yZQpMvn5GjcAhRivEJXTn4uhw89wRJg3YmN\nwPok\r\n=EdrU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBEGK5jbrBwxkA86D6ChYGBTdv75OHzvbYsXDZXTlJ2mAiEA/brfje/bT42mAWdwaM4DMcH8vGCqJIwTw2bSSwgtk6E="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.5_1576713087585_0.3994361500885637"},"_hasShrinkwrap":false},"4.14.6-test.1576789994209":{"name":"ts-toolbelt","version":"4.14.6-test.1576789994209","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b31d49be570d31c281bdc20aef0fd6d62768a06f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.6-test.1576789994209","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-4e3uDZLrUZ/glLSKlNDRjVphQHYuu0xspMhth8BzQUjq/owBfAmcAZ4TqMQmixQRXBt8Dkh+CMOFanT3mgYW5A==","shasum":"2a164fa7c029fa71904fade0e812979a26c0dcdf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.6-test.1576789994209.tgz","fileCount":6,"unpackedSize":327051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd++f3CRA9TVsSAnZWagAAPEAP/RbybAAfdPc2ThVZiOBl\nth1P+/KShPayrZPCVVz9ZywKg4OR/IuLzGsK8Q5ZmDM1646FmgSO1Jo//4jK\nhhaBvo2N1rx3avLN/Eww51TAm0UZQB9yljI/uLL4axKDrQAZnh8i4q7kVTwA\npCs4fvJbRmsXuWDikjvkUWKMYip6g+ysaacui676W2sWZU4T45tRm2Dx7fmC\ne/Baj+UeSUNQ2jnaRDd9WQB4PVOs02a9dsAy261hVrZr0Ht2XcXykRSaIzgC\nM8fwvAtu5Aur605hJACZhutoedETjeq8gf5p4feabRpKBwbXlv88ty8j6yU+\n0ckz5YE4bweRMs1SheTXqZMc2mbLpJ5mnRdX7puEt35kyDbkcnZTf48Sq/mv\nStwEmNa8+/GHeNslTg7bFQsfqHWXwuq2b73gL+BTm5WTTOjXp3Gy5KKtB2rH\nO2u48CoLJmzeYNMQcco5Wp92YSiZ12rOapUMTTwV2BLG6y/1Owg4NakcgEm6\nEd/iIUS1MVukVnxJNZbD8E+KckIQYCX2lEEvjoLtiS1/96m34VA2MPlVWChT\ndIh2UHa6hl67kJtDqFoR3wEEwXUPtfXfwB4a7gT3Hkq8BYcscD9O69OM9IXw\nXyMaIIHEdkeXYXYFSuezUkSdOhE8QwXHy6Hkkz5ZeKpzyxo4JwS0BGBcuxmJ\n12mu\r\n=mD/V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFmRxfz07CwICBfoKCI3TPRPGHN3gt1vR7CrVHzUsiMAIgFdj13SUgNczjzIRcQMxwuG01kck2hLJ8+piBpemELjE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.6-test.1576789994209_1576790007221_0.33770443201418177"},"_hasShrinkwrap":false},"4.14.6":{"name":"ts-toolbelt","version":"4.14.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b31d49be570d31c281bdc20aef0fd6d62768a06f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@4.14.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-SONcnRd93+LuYGfn/CZg5A5qhCODohZslAVZKHHu5bnwUxoXLqd2k2VIdwRUXYfKnY+UCeNbI2pTPz+Dno6Mpg==","shasum":"9a232f62276caeee4fa9e81e0c4bffa047de0765","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.6.tgz","fileCount":6,"unpackedSize":327032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd++ioCRA9TVsSAnZWagAAy48P/AhQBEF3DAMympUmFnRu\neSliLA+4vM81zVrHNtOfNBj1vPWjVnHbH45DpRsmVE062n/xFdPyhCnG53mB\nGGwyHFs22pAGGfzAXuO3JGSQ5pvUPED2QLkipep5Y67llvnUeQ0QPoQEymop\n+UGZ7m1dwZhhw0ftedXG4CqqEZMlZ8ai+8UsqoAOZSz4OhhuqzoE4hJ1RJU7\n2/hMPro7iZirslF6nJFExMF8gNugHD4Wy+nfIruMl++/lwS+5byebKMjrKuq\nZ8rqEXIZFccPrCkclfYfiBQjsmGQPQp1HqKffaIncPUAId5KX9DZv+OZujLC\nmVrdoVqXQVaPrvH9by4DhS6BYGzJGblKHDkkPGvRtng1GF4dNCdl9N0N5ixr\nOMM3OBMpP4U7niSbTcNGzYlubtSEfNLIVjQB2If5r8r0lgoUQOUrzWWCT/nT\nLb02lu4DZo+mn0rMLVghpDxHfSITLv3ie/mqB24Wl//PZP72KTY0GOejtCna\nw+kV5URg+L7kX/nx6BofV2pEQqZAbtfwiL05JtAPLtrD3EBW3ZR02ZNxrinW\nFa2ELV+ufDj3T+WZVszqCPgcPhtaCyUgSedMM16jzcdzAyO6aFr85Qqn3z4u\nM6ieKWVUtqaOmfEcp6y7CPw/Dqhzacdhbj9pmwMuGKtE0tf9NMniTjOohLlH\n/bvG\r\n=9a7v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC4g3/DHD6U+QdTA5U00g1JdZL8wNN546uKCPPuCnuLRAiEAzZ2WSe0wDDWvUgc8MJrDJw0vcdLS/CiPZTYYOQtcAXY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_4.14.6_1576790183719_0.41223908697858036"},"_hasShrinkwrap":false},"6.0.1-test.1577029376745":{"name":"ts-toolbelt","version":"6.0.1-test.1577029376745","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d53ad1089d7cbea10ae5409c8f3f86cc3bd60e7c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.1-test.1577029376745","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-UFyb32BzBp0ghUZdIwtj1SdM1a+CVLSCubVj2+cY/0VJ9zZA9F1q9O5R3Q5jSw4s9wUjrzWFhm4+dt/qCyp2gQ==","shasum":"85f1c170b924d07845fb11b0ed0643121ebbd2e5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.1-test.1577029376745.tgz","fileCount":6,"unpackedSize":338921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd/48NCRA9TVsSAnZWagAAM60P/ResNkC0t6Clmu3hR1Lf\nMnbDaVNH7K4qv/mYpAxjK/G1AkD1swuS1sqMdaqOrB35GuxyPzItb3M+dOME\n75cpQqE4GKdTmoyCNBPcYcFFdnwKdZwTwQ3d5JLufIHd6E3Z08svevxaOauE\nRsQXwoN6cIeke35rndFd6GHqO3Dof6VeLF7R4S6id9jkiPDlZdwJm2m+/R7g\n7zo/cDeOS2s/Hi+XYusjELX06aHvJOVdlSxdWzKibGr9z0sDAaSihj0AjwYm\nuSc3Ru2zu2kUhAxwHt6OB6DAjOjK33KLvftBYS4XSzfC0CMowhFszZfHNQNY\nEu36m84jWe7eZiyOC4oSt+RHQKop4Encv/ArQgBV5JA+nZu2kv/FHaeWlDz+\nH0rDLaMCJG1qMWtIip/BLoFhYZ+yFSAg6DUF5iBFV7GXFkzO6pOq07Q9wa1m\nSeTcu1cXiHw6vCz0rL7o6UMvOuDHWnHh/gziog/7nKx7JFJ9A0f1aVRQ87a7\noiFJC8NAryBZvjAoRwh7/EBdvUIR7DXh0OLtxzRDnja+Qld0RRnQIf/8FkNv\nyRr3xowMEv+TYtGJUlva/iiwF/nVCq7qjXrvycNQouBHEYGzxSJ4CJ8JOy+4\nxgHQLE1q3pzrLIN3nAHgVYvMkBGMn4auJ7A2Gf5FU6QH0klWOtEN94Baiv40\nSVbZ\r\n=jbwi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvhPvkl5f31GHyT3q1/eWyV1BCaUWNCwHT0hLHNurZ4AIgUnOSW2+6J5WrZvgKu+Eab/u6fBiC+2szp8OjCV3mcng="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.1-test.1577029376745_1577029389310_0.10660325291870953"},"_hasShrinkwrap":false},"6.0.1":{"name":"ts-toolbelt","version":"6.0.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d53ad1089d7cbea10ae5409c8f3f86cc3bd60e7c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-TtpGHn+q7m9imKOZYcfGzXLzGvWyXVQX10kTDfo9/ArsKtnqtIRDRWIzZvuATDb3ioaqIleztwjOrLqYCh+V4Q==","shasum":"53bedae1e35c74ecf0a9dd09686f2d7f61eba46f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.1.tgz","fileCount":6,"unpackedSize":338902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd/4++CRA9TVsSAnZWagAAETkQAJvzA4OysTOZHph0EZEC\nwy4HPm884uR4jjLUmmzr1sm6Vf3ANYp9V1yNkxrZwS4fRtNuLMrkGEZOxZro\ny66XZq/4Xzr7kVVkvzHo3JHPhJGf5DtDavb2SGU2l0bSt+ClFLuT4VKvVYCL\nyyPM5vQBO6iH1DMklUzi0IoDNERqgICBg61uBWKf6bXwvA+xN8LW9VyhL9Xf\nnsLQwj1U5afRn9aC55uPbKIH2nS0p15yOP1u9Nvfu8ORxNIt7tAqw69OLWVY\no++dfBjCiBb1DRbVKfdYnn1dFWf6544xdpvcBGQjIumB/52buYSDIH1Mlzud\nc0+allm8mWCLtKTu94Sdy/U3j60C50OLZ0/ga1VUghECUdPBkoBzUj1lAMVU\nAvQVGpPAm6hyNOyqUlAmH/1Z9wyaYAXgYnDsOI/mfG+e3S7EZgmL7Ryvwowa\n+5zqnaIpOmMcyCMgC+2dg/ecVReXdBtNr0nzpvS+aXAeSP0iJpqLHaPOTTG/\n8eveHd67+4pSUtNRTGOvvAHpfL+m+FkTOZAWu7UzosP86LN5w9+RArWeziZs\nHvKaanhJXh7Wje6BmaCL0xHiBqSgwuQhrUjgEHbTIVOVAytRIGrXNOdsLipV\nIFJr04GloTmZeakFTPBQoiu5beTiazMa/Q6y68ordMewVxx146UWSBTcIbgF\nJyJT\r\n=czja\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICiHy3RasCQo3jDV0GedW1Vj2g2MYGayW4VRUcKjCK58AiAItMH5jC5z7kBHHMd5xfKez7faEzhfrj9WSuNXJo5llw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.1_1577029566180_0.0784110692125437"},"_hasShrinkwrap":false},"6.0.2-test.1577579892641":{"name":"ts-toolbelt","version":"6.0.2-test.1577579892641","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"dbf9d7b971be2091cf91a7bca20981285631a44a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, T, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.2-test.1577579892641","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-hdBEttr0Gbkb3RW2fC1bf2l1HjpaJYmlJAi36M7Cz7lzALsnlGBJ3J8uGlV0ms/iS3X1TyylrFqdTfOHH3MjLQ==","shasum":"00a01033f1dcf64430705cd089e351e3b188c420","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.2-test.1577579892641.tgz","fileCount":6,"unpackedSize":341883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeB/WBCRA9TVsSAnZWagAAq3oP/1lgaj18exZzSiOKybSd\nuktZUk8r6raemZr1ooFwIRqczwtTCA0LRZtG9AavSB50hNqQJbQ28CFH4umI\nPlR7L7QqiWnuQMNclAjChg6hClJfKd/fQqFq92LpTZAEx6zXQozsUbOd9kHU\nIx13lXWRA0MS36l4vMJZzeDOPCyKe8kAEPbCJ2pl1JGYIRDrEn/EjvYa3tny\nnYzgoD/PN6ab6AI8QZ48AtwzPHn6dvH6KYpFqqaU+H2MuTDdjgYA16PNd7TR\n3dMoIbceEyFpMofA/QWXWyt+fq5fWaVc/MvxWUrDFe1gMa8ieX7Am2pIDc31\nFYuEDZqyyJm7CETZfzX/9p+j1FhffLSpLW8xQpVwS3IaGLjeNjvLs6MtFJIF\n4pc4YsJRIiOH4AFyhgzEg95AN2v6WxHC/y8M2W2I1CiGHeWRy9ct3blgkzK7\nd7qS64ZAM1Ldj0dNWYKUA75A2ty5/qAhRnbfNFR46gEQ1cfLGT+tmUgEte4o\nVfslZuShgEavDWh6ka1RjTtDn5BcJJFBWBi4hlytzAz5e6vliHduPtc+CeXJ\npqe5h4v6ET/Gddk9u0bh+IZqL9iELh9t2TIqg5kuUOHpZiHD0cwCyIPL6OYH\n09f7l2e8j9dBKA+0r6HXVRJvsSqVoTxNe2+asPj/aMtrBnojuNnsTBQb5fM8\nWZVJ\r\n=MOiX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS/6IaP+zUef3iaregYzMkOcxwc84LS06EwV+Pvn4VogIgCyBqLP2XuOel/EVdVjmDNiER7dPdM8bs7NzqQVQaLFI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.2-test.1577579892641_1577579904826_0.7460809731315943"},"_hasShrinkwrap":false},"6.0.2":{"name":"ts-toolbelt","version":"6.0.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"dbf9d7b971be2091cf91a7bca20981285631a44a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Iku49DHJiCUX6cCa4juU5GYV79ujyvmAgJz/jbE7kk+XAnopxSDzm6P7krvqFP2JQV5a5rxyDn5KR9sdBukGOw==","shasum":"74b14838152fb51963de7bd9d0e8bd798285c0d7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.2.tgz","fileCount":6,"unpackedSize":341864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeB/YtCRA9TVsSAnZWagAAEn8P+gP3Z0BFU/Fb+sAIYENQ\nBn6S2C+Lev75GKewUKeIXE9VlvLeyglohg/vLfKzdYg6nYo6evVPHfbuN7Jk\njObE3VTrOyETq1DccYdROHXN2trO+4cEB1RZzg5BFUDj9Czm2owk6lu7/2ec\nMIMYX+JUllllY6tsrALrZ5Xhr8/ZQgr3/85apnxu1hX5wzkzZzqC4Gee3VHg\ner66I57HFQCCRMultf3s4kqmyNl6Ki+6YF/Rxbrha9gkt+qcFh4dvTTUv57e\n+yY2Rt3cTwGRAyEqQdiIWHW12e8tEtfP88stylmNBsEUawC6BYXJYXsDynZn\n/iUWSXFIQdENkMsr+68dSFrhxTz2JEANForiDTn5D1xzhN8Ka35Y3N2sjSm+\nXGHlrtZBiuATXm8SkJEDsao5oIUH+K1H8POAwOLUzubxEb/DeOpQldFrw2Kd\nMMPW6zzhZi/w8/lz1tXKPmeoQ7uJmag1exBgo0ORWyGL/t6f8jMyHPORn052\n/MwK27bCN56Qh84Zfr2TMPs+XgUNhUiU9w2mV6FDAzcvotmUnoQHFczl5YkW\nPWBU+Kxuuf+GUXnCjeJYjdpc+Oz5y8AxWalXPbVlKyF1/iaboyTaY6xFbYJn\nYIwbScFkBfJpoy64yzjJpTy8uL3iqSppYkWETZzh2Jo/phQvt6sbxGX8U8gu\n8+w0\r\n=GK1q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCavzn006mbq5KVY+4/HmDUG1sEHXNmS3VrmBXweo0kkgIgDmaFIIXuDPuOY6IJMNyHxrIrYRshN/EAtTvOZ/6esNc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.2_1577580077016_0.9039019883423918"},"_hasShrinkwrap":false},"6.0.3-test.1577581412587":{"name":"ts-toolbelt","version":"6.0.3-test.1577581412587","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4542d9973a848a2bd4f9baf12992efe7d7a69f2c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.3-test.1577581412587","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-uavjs93vLhdH+0bkpoqoTJvMt4oioQq7SmB0ONCfi1CB2eSrg+dJaNSQrt2HUGkD03NaYaEcCAzalSc/LL034Q==","shasum":"af25ba82f7fd87b8815635a3a9972bd6d1b07c11","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.3-test.1577581412587.tgz","fileCount":6,"unpackedSize":342266,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeB/txCRA9TVsSAnZWagAA5SQP+QABN+sCH5rix4BcfVpq\n8aK5IzbXPEpFhvXnQt7/W5i6ROoRBwloobc3lZLPsspnzUQzGvCg8FMzZy+u\nL5iPbOBN8cVzSW98rnRDWKMRwFGs8oHao0OkDYEULki8cQD2LNZBsqjQ/e+X\nm2JU0Y+jxf4ZodHRDTL8J1WmaH3qazTnLaVYol0/f6JEk6xqPJXv34witFK/\nla9aSIrRX7gQunCAeIFup64A7dSf6R6HfWDKiQbi+ctUYCUOatbd6F0jzOQH\n2phopz2wbUTF2c8baYQ2OHZ+J4thbTA1VomXTgZtYqA1Agu9uU0oa0SJrVCD\nYfa3wR409F1TyvPUyKUrNBhC5GA0S/CkAqdHaIQ5d0QOEW19VJYJFxHAUVqL\noe1W8l8Iy0qlH6ayBBosgTu7xAbL72SZKruAdkBlbMcjpcxp2aAdep1BLojy\nr1TomNmagQ3LAfUIWEPohi1+GpvvW7lzwckRmlxTa8O7jMP0GAxSCZGBgC7a\n+MAS4iRFKh/MR/M2GgtxAPj+dg7QlKKyDv79cX32/aXvr2SDYwfuOPOFg0hm\n6WuNnKpsand7zdeM+/dUedj8xUd30GcwX+yK3EaE7eAuEg272QH1Zzl3qtNJ\nWmMIXCrzoGowwhNzDo5UN2ztW5v2pgAU5wCxV3fPleJ3Mlilw2X+g1KDrsTm\nSEhM\r\n=4bZd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAVcod0ruM3x0++FKghi2W/3rFS0oUzi5+V5WBflmAXcAiEAv7JsOaSoJeuyKh8u9M66Z/665E5qEJS9LsY2jk10y8Y="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.3-test.1577581412587_1577581425503_0.8035270538040062"},"_hasShrinkwrap":false},"6.0.3":{"name":"ts-toolbelt","version":"6.0.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4542d9973a848a2bd4f9baf12992efe7d7a69f2c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-EbXj1r81pHt/WAuhGnp2oJRh9LzTvrLoj8W4obOmVjYLGP941OOnZ1CF+HTRxUOxaKstdInBPSXKZALxeEZz/A==","shasum":"1ab863bb00f968f8d7b1c4635b98179bb3a22c3a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.3.tgz","fileCount":6,"unpackedSize":342247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeB/wnCRA9TVsSAnZWagAAp50P/R6JeUeT2SfNy4G1Y5C+\nNYrFGnEqFzrYQkluvCdfIh8FD5/ry37rzS5fw8uKwjAgceD1u1fNk9fqplV/\nIkN7dpGEf2I39pbafiKMoSFV12Ghyk2NwGqK7uZ6VZdxkHS55PgfAy/9K4Eu\nqVm/NtozjEExCYtKWpEZfjUf7PMEHBJt9YUGAmvG0+DLLW80ASOuY6P0iyLs\neUuU5F3Ib9waCbazgqtWQNjIbU5D9/7uEskpd9WDyRTqZQinfBCBaFHub3pR\nkc+JODTDWuvkohdAtVP0XEVU29Pkop2Qjn+wFz16zFtNymKDpM0yqUWqBbid\n/1SHiNQ1cHz8hSnRnm1aeJ0L+2GiF+jTV5w5A1NdXAJSAGMQJfyBWGLXMaS6\n7/+SUQk/0BCDmJJ9Twmn/H3ZpSn18mEAsknhXAB10IIfZVeZUbJ+Hxa/grIi\n8IBA8pVw9w9btotQBDVRJrP7c4wO+rqttBBTJ5Vkgk7u99ZXrs1yYZOBLkbC\nzLy57EplWCjSFBa7LHPOq5qIjhRjPN5PWwjtSENPwamOhRUQskQelkXFotXL\nJHALqeqjHE0iMMhEAHyUl9/WPe5mMCh50yXDPvqCRKxW6qBbuncoTJPj6JMe\nbXfymY7tpuCLTQqVItRGiHsXSSfslliGPFLKZYh+BnQVFFmzzRgwFd2A1Ljd\nNiHm\r\n=IhKL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDr9Notsw8Bq0yhXWTZWwkOCrRklL3nHvew4oJvA7DyfwIhAK/WDLlphyhnAPaEhOYvy0FqvNhxOwN3GOg9a27AmvDI"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.3_1577581607210_0.6203123717365862"},"_hasShrinkwrap":false},"6.0.4-test.1577660016274":{"name":"ts-toolbelt","version":"6.0.4-test.1577660016274","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d2181c361810f4431a2bfb46d318dc1afff29a69","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.4-test.1577660016274","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-f4b2CTW6oXII9V6QryOM/vRRun0nU2bjVwGUEZH4ijYvDYyW3e6IeHXhpAQ4iyvrKQ39DT6se1n2kz4OfSCUSA==","shasum":"1e9ceb81c78d1ed581bddc77638529efd23bd360","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.4-test.1577660016274.tgz","fileCount":6,"unpackedSize":344569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCS59CRA9TVsSAnZWagAAt1kP/R6Ey9TDEE2flfYf2oxr\nkisXgvvmfMp4/eSP0cJR6/B9SAL20dzBxL8X33vCinSRniFtozJ/6u3IeOPy\nYos5oTlQpQWRqOhLPHTPcRlVXUtByx3opcDOzQUrBLg22p/V7AG6m9DqsRgq\n66kD7W19uzurKnKO3X3VwcY4v60CScnz5lpVNE0Wi4G9MDOckjy6P2laZJyR\nX55M7OUvJvmPVMWBx6XLwWRGN8lXegwfaaI4E26nt+g0e+gZVyUY9e3iMUlC\nL8jVKEuupr8f/jTfh2xm3/UKcQz4fpPnj0IVvAMlLg+OFemL+BBN69CrdTn8\niijRUfWiIqTRtwUXc//lZ/+AfK86FDwnSrP2ROVMzTO+G1WluAuH8rmoFAnJ\ndxw60XsLXFb6WOpW30Stcu0msHuyAvjDi3lVqaoFiGkAtW8hbiMPTHWhkeBW\nDK7fiufwlETiXhu6+tytG9IGlTH2c0uFXiqfKiw1hCAoKx8Ut850iMomEzPM\n1gVIYQq9g5QdSELrvqSvAxRbxDZgy/B4Pnk3+6KfKTennwh/mZ+B9hCnw2hm\n/ppcPtTlBKdUeqFgg7881h4hYsybrSCxXgeFswVhG+FbS0pnjyMvF6QkCd8z\nCmWwKHeEUMBVh5c1Y+E59TXqptt/du8DibhiV0ji5OONhSGrQ+MXZ2eUBSxO\niMEU\r\n=Bxzd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrBKtWyIwyPAK6WZdA/JuvihrOnbmfO6xQVVoaeDyYIgIhANKoNd10yxN2u/abgaBiTVneKq6tpr0GIONPs4K10K/M"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.4-test.1577660016274_1577660029079_0.36147820199536995"},"_hasShrinkwrap":false},"6.0.4":{"name":"ts-toolbelt","version":"6.0.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d2181c361810f4431a2bfb46d318dc1afff29a69","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5YzbDNwf5ocvPwPoJtjHgICKLCn3DeRDpW/4QTQgOO/+XUm7rOjJjysixD4rOx71lAD5d7c55IKeitcTzOj9lA==","shasum":"dc7c825840870bac6ddb697a37d931210adde1a2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.4.tgz","fileCount":6,"unpackedSize":344550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCS8uCRA9TVsSAnZWagAABCgQAKG4PQTrWUXeCCEdPcOa\nosz0bc76JQIOufk49n3OBH0YhPAQRDNmfZfUB00XYqLOHTs+zQbttwBNMyX6\nHPyQETE/GWT00gclac5iJxy+uNxjEVmoxCjrJvuLLucSkHT3i9O1JKob+R4y\nziUpSlPbnmnjKIiJ9e75VBfqmJLNSzDrKFUdn1Q5FLfcOFOMVn1HGmF3Owml\n5YqDg7sWStprwR8NyScHtEvrMgOt4fkvIv2n9A3hlDWgEM139wyjKPKVHtOk\nkiccDD4pmmwj6ug6zlh1lLBDh+NflcE3eTVLhh1DVAf1ZY25g317OkvRwnvR\n7gPg3flQx36N+VPf0L22e2QbUtPNaYAlKCCoxTsnC4eXLgKkbFZOKx58LY4K\nqJobtrCxuuWQTWft6T35f708XMglyYB+RGPDjsncq6yrCigES2zLVlwl59D7\nCm7rs/pLuvVzR1gy1s1DSq6aHnf2w0Vu5SID4OgC2HTsdDiBADrIg8NdbZjh\npnyhfFzrWGCGniQr0kuMIcOzgR5DlxN0EhPB0MZq6ud//igpY7JHWcGSWP5L\nCQPhhVzL/VSSTgNkFkYoEilces1AtTLp1pkf3yQ6D0HnaaLCl97kHunWEKIb\nmtvr1S6yxgM0nyVfQxQ23JKca1lnTJ8xA1KYg5MEyijcDgMtDPHxqdeU8gCv\ndpPP\r\n=FKHo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGw5opkPeStK34hYqQKnwmaLuJqi1LiiNuNFG2WL4QQWAiEAuo1rdu8SpOh8AKa22KADxzSpycAynjb25myyuR5btCU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.4_1577660205471_0.3989236216466443"},"_hasShrinkwrap":false},"6.0.7-test.1577718149527":{"name":"ts-toolbelt","version":"6.0.7-test.1577718149527","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"5cb499c113ece8f0ef609fa82e3862ac18566a17","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.7-test.1577718149527","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-O8AzeSxwY6LC/z5JxDIZRBxlVPL6249kX5PNVTFaiHbglp8VR4Yiz/IWf5fRAdwGj6DZsChyxmK23xFYLsuz5g==","shasum":"adf45077705ef8adaa14eb29772480245aa2c8e1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.7-test.1577718149527.tgz","fileCount":6,"unpackedSize":348134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeChGSCRA9TVsSAnZWagAAT7YP/3lTzscYbJ3uwDoQf2bQ\nuqPj1fVce/hasBoLF9kqF/qHWPAHEraHNQuhg1W+f6WdHu8uxdO5LUVCgY80\nfaN2EqUGZSdO1G/9j9u0GG4GnLjjm2eJ8o7C8bcZpXRYGwh8Ia8Vv+ys4SP/\nQL4O7F9hfbh+wzzmrYv1iSoLILGJzY7619CmjsR+gWY+Hw+uAcoLlli7v8y2\nnLqbLQ3K4Fv6xu5PW+QPM+oV7qyf0xiMo4vWDvA1dGfmBVZIinLDiHartcRo\nKMgugAQWFThcP8qCgq+QF/ANE9LkZSA0U26FYjoF6FjDxdq0RxmVZpAfrvFB\nJfY1Hqwq+PU4eUbPx+mpJ8pKNB2FANm9MBnp5fyZoIPXS0IJSgzh5yQJ4FAJ\njbEYGkSm9qg7LnjW4hgvkFGc+105PJflcz1+eoUi8hC/2ptAOm/7WRpBPDU+\n73SY8hymj36/HG1AFN+xA5aoGPr4t17xt7bnJKB3rR1CilDKwxbMCxHAye9X\nL107BolSC9e0dbrDg7CrzDdoD5q2yaQdtKI7YrxbxKiv2ZLQAwG6urYj34+y\nSYWCesjcC722gZ57354pWE3PslUx1LOSrDJl7vgQ+oVbXpyG1szzQGagCN9R\nj5GO55iEFe5KEaZht21t13j8u+8WcS4PCXtJkdc393zyjV7AWLCRb3PoJPXG\np7Sy\r\n=o+YY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDIvsspPc6j2azQM2JqAmlskyYi11vi/+OAd63WaSfOQIhAOsl2aqaORVA5obncLC7Rg20KrRYk3N2herWvCw9lOvJ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.7-test.1577718149527_1577718162323_0.843954627994908"},"_hasShrinkwrap":false},"6.0.7":{"name":"ts-toolbelt","version":"6.0.7","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"5cb499c113ece8f0ef609fa82e3862ac18566a17","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.0.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-myI+JhCT9GCB/6OQu9KTMrcuzAWHF2DMuXTb/3svnYzZYLFvmiLeSWq+wGpKWbTeY4hiCN1YxhMOCt4lQZtFCA==","shasum":"4d9afa0c8f4b1c1c5839e121b81ff75d37ce6c6f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.0.7.tgz","fileCount":6,"unpackedSize":348115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeChJACRA9TVsSAnZWagAAEcEP/1b/g9Rq0BI0SAY5fCoM\nLc06aUGBO/hUWzNKiWwkYoc+H2LjgB5scz7/2j2DAlFZXhJMNa+XrMdhvwVq\nwWmD7p3FP0BdcXrW0EPxCaD3D/4Z6kwQXnLX/hPvlBYjheXADN7Ym635xnnF\n/oIgRGagFDCrySVwSw0TwlevFV0fCHIplWOC9F3IEiD35hb9JqznVs3XpeaE\nJGn56LxAWkpptO5xq/xH4OoQmu0R+SZsLlhkXFQ0NsmpAhvt88PTur6tUGRI\nGZzupMaNNfvmiSDoQxrVWbrdNUedVdXk2X0xMeL1webt3b99RshgNm89Y5lR\nzDucJHB29gUn0XeXiEiGxmjiFQtjBj9Pn2rlNHVWskIIUWMeZjaAS4STC5FY\njkNpd06PRgMpoKiPeHaZOW+KHSS+MLrzhQ0j4ZOQvGPeNt4zBKvwMPN06d4I\n43kY7iVBwaJc6NfHdC5Gg5fJPRtvQZqFlv+Ixah3atteZjD20Pi2sAQ7q4Zu\nL7oWb7FBUJGAkVXdXSJkoSEa0KDj4/9I/JAFe4B9J63yrWfAP4Jl88+t4jl7\nmTVF/YbQyLqe1iXM0m7BbA/kI4gONPqL7lFDLpWbZd/Jy9DqffxPp+sSHnpY\n+qnbsnZnfmwQRMvRHuseiD4mP4bNvzbLlGySq5plH+6mHuKr6oyb53VyjHRQ\ncm9n\r\n=B8jZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCq3ZvepuqiBYQz/iwPE4VoB6jpfm5mY9WklGCn3R42wAIgUZkzKAG/yHA/65wOgVAgqN6tb7gmSe+g/ZZ6hPgmtJs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.0.7_1577718336427_0.14606684056056274"},"_hasShrinkwrap":false},"6.1.0-test.1577725119213":{"name":"ts-toolbelt","version":"6.1.0-test.1577725119213","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"78a1de9d097fc5846aa3485f928c3416e3fa6a33","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.0-test.1577725119213","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-MBLHWCCBCZ1zdtVJG/DDso9pENzeXLY+Y8NlYOZeK5TEiV7vNpR2SYbK9h9r/xmwMtR6vslwpRcj3ZpIxpXwzg==","shasum":"e795d01df126dc32d4e8ba797d131749fec0c747","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.0-test.1577725119213.tgz","fileCount":6,"unpackedSize":345996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCizNCRA9TVsSAnZWagAAkTsP+wYB0cZnL362BUdTzuJG\n/SBDnzRMakiEMwDxjE33sElZdAQmSJg7JwlER8ZTugETs+JOp43LLUBp+GO+\nttO7SsAtVYX48E20L2bYQeBXMQQpIKuRT1X+vLnt8z4qsLCHOHTwI4X7Cl2d\neeD3puctvbp8jJ531Qsqq4FpxZZNz6pFLDaRBcuj/gTX73hqfvpHQGrv2dfh\nNt03obZYnQYmhsw2mXbqkTEQdheL6SJ/NgwWfb9Z97r10H7ir+Hq5Ai62b+B\nNyGCE9xagv6HUBm8LYKXY3GkPTO2+ZtsOKB0OwYlzC4Xgf+Fs9LzBYgbEymM\nh+r8JUPFrFmt17hB5b5aLVl+Nn7Qc+y5Avv9w/tTySdOSIMdgN0Py3pdpyiQ\niN2aroq7hleXZC6qgz97v5ii7Pk13ANZ62HFpMavX8OP9YP2w86v698rRZMy\n9+bmME5HaSntj8fero9F7avbU8IZ/H03cu/yPxB9yKy7qMIUTVuGZksWOBJA\nPeAlaqzTSDSSMGZ+AAIvxrJjWRi0MsOJ1OQHGp1LcatOmJZ51LkKTs0cfn4M\nCM79qMUU1T9mohsCIOTBQLkg2DRiqaSiKSUeQBYuBfcU6+EUGyFBeBShTAyV\nyiyVUL/EAhyhgHONduy/4XjnWVBnfpj2xyc4TwCRBau2N1uWUMdC4uEdWl/o\nR/za\r\n=y0GS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDeUz0higYNZkORm3fPFTYtHsBvuzpOB27mf21upOb3aAiEAnr+ho5SFNwE21usJ1exJepAg+S5f52Q45smmpUnMwqQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.0-test.1577725119213_1577725132557_0.8202667073752135"},"_hasShrinkwrap":false},"6.1.0":{"name":"ts-toolbelt","version":"6.1.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"78a1de9d097fc5846aa3485f928c3416e3fa6a33","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-8p9Yx3er2J6yEswBv4L9FhHyY8RA+WMoyrN0lPgdeHBVx1GytPaT1ZePXWYrFnJoVCWIRCcL6KFMA8c0TyqFyg==","shasum":"fd49a48d884a771e2595ab46058d43a8a44daa5b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.0.tgz","fileCount":6,"unpackedSize":345977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCi1+CRA9TVsSAnZWagAASDIQAKNCA+azVUEtmQL/CfL9\nbXdoiJzebVTZa91+oGFziKw0koTOCswXykbgLSKddJfCgK5Q+HhqfxLavK7z\n3DLRtqozsRSZ1ac4eORIkil8Z8gfu7mmIpQGZqovaYYWNnqz3qUbKREFtS1p\nX9mP2IeGJJpJ+QvsnkhEHjfRxuBJNMB6uZFaXRdK/cc8wDWjg47mBH22uZ+p\nZHK8934mvG7G9lNrS1v10bUh8MHZLQ2dA0FGaiYFKWhul5SCWc+CdIpcgUeC\nrNcZY+thtor87Y7iyC5zTTYnUZ6HiYnVaOIcUtvoONUoUVNDpYB3E5dWoirp\nnwUYz+xm+guDzgXt27V1RUJAK39553OIxoa3cubU/pw0KOTrtUjQN3sbUS5U\nRopoi2XiSql42f7UaXlJ46atZbyj8zDOnuF1WMYYAhIuuLJIZSfzMkgXldXr\nwU8g65+MOfTnw7TSd0pyIvBGNX4zKcog9IH7nnp4cV+casbJoKHxOBFHtwRJ\nAv/r6/Th0MLHdrtUHh84kYuxfX7N2QIt6ukslHCZncawxMEkosm9g65PkHaq\nVNUFlMhLfC3fsEJgVZCj7Xdi5bDIgF4y8cPnIKahfe8KJFes2Mp4nHFEL+qG\nHXRlWSQEc+xDSnYi9LJW5n1xt3CXXHDSiDI1Qi78oiWiLNFC9bOJPVQXT76d\nOIiO\r\n=nxSi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDnzfUaK26cnc3LeE+1Q7voz5z6KaQHcbTVelrOheVm9AiAnieYqbn4aqN/nflR/hxVojtCGgKQKnLc5iOmNYWP+Aw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.0_1577725310054_0.004618797842049105"},"_hasShrinkwrap":false},"6.1.1-test.1577725832381":{"name":"ts-toolbelt","version":"6.1.1-test.1577725832381","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"8d4c5e4ed88b7572cbf5727481d85c24dd43091e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.1-test.1577725832381","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ANpW2Lcidj/MwrLO7GC+MIq/fohDyl/P9E54Ydr1epylnGMEv5j60rq2dhw/z1gA8JIctlqfeB7ejlY3MmoQtg==","shasum":"5f6d9e06fe5e3a461d1769b2ec584c4939149125","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.1-test.1577725832381.tgz","fileCount":6,"unpackedSize":346212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCi+WCRA9TVsSAnZWagAAD4MQAIS7R6KyMqhuRoaxwFN3\nVXP7v1KEmLNAufr1V2jp8C77JGdm0x3hFURoNuY67FIgu22fLLl2xn7bsggF\nvxXwQgm/ODGmwZC7T4ImwspKtIJ5ml6UgNwxF8KYxPZcpnEqiMymoDldBC1C\nBrnTOmgjOXbP0daP7atTvjn5uEo6So48CQ1JhwxIEET2yad8N6Q+BCQ7x/Sk\nVMoOc7sSAKHSapKLFYeusceZoca9i7T7qWCcYrLGg4MvTKkqn4jxcSia8xMD\n3h0akZypTgSIk5F9t24YBtMmDd8a4cBRzF74GcnLB1+UGWaocDfZNVsw02Lv\nMf9Yb4u54fW02AW8LYjeDnwDFQpAWvn9m7Lpw60+sLd5DOfqU2RAESENcIic\nuOiVRWOFbFlEc+b7Ih+psEPvV0VSRyORmzGg6hOLZEMCMdZzF8bdhJO341Fr\nuy9w3gz4iZpXa0TV1nioK0eVkudYp6/vtXx50eioXq2ZdlApvPYa5TIXKZSn\npmpRZBLv/TiRWHqdFnvvYQOGxsgYaCeLg046Zc+mfEUBribwpLPtvv6nV//n\nGYjO3/A5RT/k4X/PGHQO9Sq1aVNm+OnbGkM9cAubE/wL+XuDSWkfDDWnsA/B\nbFLPXqUOa6GRk7CluHI/WeA8P4Jxa22Zrr1EfkPqesRUZTonLjZAO/hPK8X+\n3XXT\r\n=/qzk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGLGY5NjTBuVBO3kRQDPbHpqFDo+6cu1LmVkL0JEsqElAiAxUp98NtXs8KrUOD4lVcQ91oEEBnRrNxdF0SKTzZ7WFw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.1-test.1577725832381_1577725846019_0.24046889194373144"},"_hasShrinkwrap":false},"6.1.1":{"name":"ts-toolbelt","version":"6.1.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"8d4c5e4ed88b7572cbf5727481d85c24dd43091e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Z0wGSXCofa0BVuizlL+v3SPwGKRUKsN/h41unxSRkPEb4OEAQy2n08GTe31e/h08XKXZQ4MLeh8ctDn8CBqlTA==","shasum":"bfbdeb125106e5f734de2080c848c5968f690412","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.1.tgz","fileCount":6,"unpackedSize":346193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCjBKCRA9TVsSAnZWagAAsiEP/1FPvudVafYcsLQRGCdp\njcxuFkY2GJ1mhgTtLMGDTRfl6kRpNFyWB0KYigrrS8ymd4rw4E6pLQMxMC5j\nZ/Lj2Nj9b4pAz/49+OkCLkm04t4fnL+wUsMFGyg55MDKwbGCVndlSjMIeHiz\nO3VwE5KImoB1AAoeKJU6gu7TqcKM7jm61qrqS2l9Hr2FxIF5Wmpzmyvau08F\n+ugDGVPZRkGeK/glXOPzqwyy1cr2+vAzx3KlIh6eEPsLtuLMD7xqTXqEJSzc\nKpBDBgieJUdtsmX5KsBRvFbSGK9pZUIabNlMTtdSYDm0qFwz+7DBBXADMkop\neACGE+3zOp4oq2j5ONh+p+1WgKdUstPq84iKygb+7RvJjgTajeCEfOcAUzsQ\nwqiznj79vOPXhy+0ne4fDrKhbGLmnmlzIOab6nap+eEYUZslShhvDqYAwNdN\nCn6Tg5kz3UhlSNEGsOOTBHwg5Gn39SuHQKfp6pIsWTXfgy6wcjz3bcVY8fCx\nJb6oMaj54mQnZ3BgF+LPS2PAa4B/HaOibJMaG4E3DWC8HqnKGnRviCUn/HRA\n/HlZUlJpOkr4s9z1IKB0yAxKDPJ6Tp4PhhSEm5TptS1gBarKoGMd9oK9r3XR\n0+x1GSH3GnS4IoB+F+gJhe+aoWORuB9PzoOun32hjfW34I/8wBUCt7QGIPJ3\nRAIC\r\n=VBQS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB9CvZ/ss3tG38IzuFqZy48JCDgwazHbnRmcjSCA5kCQIgJadhcUqJlWrcQ2is0qx7CYqk1I5GJ6+7+1xJznzSbhs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.1_1577726025544_0.11893454723135721"},"_hasShrinkwrap":false},"6.1.2-test.1577730726944":{"name":"ts-toolbelt","version":"6.1.2-test.1577730726944","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"c515c8e6d226b6b6f5e9fc3802fd0a71748180d8","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.2-test.1577730726944","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-WhnGdmZMS/pPEFU5QkcQ4GYcPbCexndpf/QxNZVDPsqM3o38CRFNgIap/62JOEO6xAqCGsC5ZnHFdKyXRV9loQ==","shasum":"445d0bd0cfc860cc4b3fe1f2453af60290dfa56c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.2-test.1577730726944.tgz","fileCount":6,"unpackedSize":346315,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCkK0CRA9TVsSAnZWagAA8WEQAKEvHc3HOm+TOo6ov2Kq\nWgi8Muu/fGtAG/SLo2O6TFbWMos7WAXOK9ghGpzEHy4cA3OW9Ba02iiFYLI/\nDM4PJBNFnbQm+kmUAFLHDcCV+S+Aon1CghQTJTYbjVzRPqIRlm6IZNEbXUO5\nmJ0Z7FhiYYFcXWDzT177JmSMAQr6RK/ndSXIPpkTx213O5hYXv5LNwRL+XRf\nO5sSTLdl8ie1LP5NH79wPQnEkw5OAbhTvR5vZe1dnIAjP/x7q++E+lsY5u1p\n/Ymzb1NygOVa0TN9ID/asRoH/DYtajyVAJZyaGWcH6ZpyjZH6QAL8YsjKVqu\nn79DnzqlLrSc8n+v8U6vkNG1WE8Kwa/vzHPkOX2aAdpVNtPXp/2LAUS45DO4\nZdPu0QbySD7G9plUzA+bBx9nj387GQxNH/rnFWtyejMYERrF/pzjZOBzYM9j\nZ9LUIZsycTiDJCLaC7grrmTmHDqSVmt32erO3OPuj9Q5VQDVvRtz67PXdLcw\nqG8E7RqXdg5oatQPm2+ElwolhMLFps8xdCRFBwGvvKyq62WK0n2qpnKezuLy\nio1MIt5bbOE/pDqUkzTsCXmCN45oQFNicaCcfWrD9aTKBF+bER5PDQQptRSK\nr1y/7rD8DSTV75IIPnGwOb9Dbv5WzAD/UclhxkpK0glDq/mdy7lzvVeHJCXe\nU+xW\r\n=TOrI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAetz/Ugff0W+bEw+du6K/Yp6xJGLO+6FNrhpxZB4R/NAiEAyziw2pOwg1UToNFIbM0mYuUKcsaOyCFv435+f9P0hYU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.2-test.1577730726944_1577730739671_0.23397396317438046"},"_hasShrinkwrap":false},"6.1.2":{"name":"ts-toolbelt","version":"6.1.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"c515c8e6d226b6b6f5e9fc3802fd0a71748180d8","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-J7k6asq8qEbH2BHXR1x9uHyIMi1do+w2sa458JWkd+C8fqHG//YmQjIbcZdxi0JoebaW+4W2kz/DQTLIJ4h/+w==","shasum":"b5b3896cd95536a73306cda594444667ffa754cb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.2.tgz","fileCount":6,"unpackedSize":346296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCkNlCRA9TVsSAnZWagAApjgP/1vxwv2sqhoqtOA3LpVg\nKCv+hLUYntASGAPTMC5N2x2SizX+8u27TGanRk0iHq0Ivo/5kNELQlJLrNuf\nExb83/FF2Vr8+CacO3Y728vlR9ps67o/4Or73jwXmg8GktwHB4VC7X7cM58e\nG7ewouaps9/Vx7d+z/yw3xcCPga2noS5mSU5gNi/U74H4bqS+lNDzzJZwZO6\nHDKo9N8Z+2YsT8u7VAjWVCw36Hf/NRb+eg1TNxbT6w11SuWl3KypUduC+LUF\nQoQSYRmjAmYHfBuwECNd897Q0vzS8z4Utamu3I2TGuTkPEaTs8473RQSnNqZ\n0JoIVGwNTh1hoaHx34QYclumjhB1gAFuGW6MKaio6PfxXAxLjfyajy1sKFfH\nmaLQhxtdB7RxIkG6X9rSvYRs3P4lnK62eFUKCMai3UQWesVoBeXB0RpkuzEB\nkDDoDQlMaftrv9dsd5CdDZ/Jm9VFdudvTnCmDH5M/rMtdL87lj5Zvan74CTg\nDw9hKkzciB2b25U5c0hjzvPa3feOGp8+g8Ei7QEQ80Ho45hwgd3oQ3xBd7tK\nBtJ+kmXyKk9d5BdjbbDKb40uN3Vmf+0ueGjDNM49moziWvs173FDuRcD4Ubb\nSME11sH1f0VFhR/zhCxXra5Er6qBPvhiFiOo38UEyNFC8FqXdUhZPmVXecfw\nCtg/\r\n=abNu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpIIXrRdGdS1TD/l1HF/Fmvd2zkthSVIerfKe9H81JdgIgH+xxlI15pvA84ZD84p+Fz+tsmZ1haalfFFqjF2k//K8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.2_1577730916710_0.029796104113815947"},"_hasShrinkwrap":false},"6.1.3-test.1577747671643":{"name":"ts-toolbelt","version":"6.1.3-test.1577747671643","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"af71c66ad1055a5efacb9aca60417b6323219920","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.3-test.1577747671643","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-upvvCfWMAsL5MWCxbMiPSGkf/LDPuAHuhFV93QzP7PoQO7nhWQBcHxcvCRb+Ia3Puig598GDFGtQiTP0yQIS+g==","shasum":"d2f2b4f0e22651b15a24820b38b93bcb179edcb3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.3-test.1577747671643.tgz","fileCount":6,"unpackedSize":346906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCoTlCRA9TVsSAnZWagAAqvMP/1VjpKgcTiZnh/w5KxVH\nxfF9QxUfPXjzDSBjMQFDWUtUTFHfgbNJTdgDss6vmDr9cKBjCULYtlQNxe9j\n/OpHuFQFuM/UcbQzs1kKPpXF+1nT2qniw4wWWMsCbGzBE9Ui3yMxS3Ku7vq/\n+9ViE4M3i7wXQUf3sc5EyawxZKuRpAjfKzyfcKi2kZnL1AS5zez88Pxl5nh4\nrlWjZ9HQP1914tfO9n7D9HJkFYKTdEE7TJ5gmBtD2TIeKSRL4HPTywKiwNOW\nBIaNOHgnnZJUdrHBXKOVxlGQ+CuPpwPvzhtvcs20LbnYYZs871R8XyajIjU1\n9nIYcp11KtgdQhT5KrIK5LRKikn+bG1fzyYbDlWsNKzHEJj7t7YDhVUEKLTu\nmchf3gaVmqrcxa6xnQQfgcABKislaj5QZ9DChENQUkiZNMJWV/yWpMTciKGt\nkqxmLXZPFGkwypno6cY8rCYuXwfxZ8/ik3O2wIFTnG78WCvMO3GaF+qP/4TN\nUF9Zl1DJbJq9PHcacAEjEOiZlb8uz5RUzgcPlD/zZRh5NdGEP55tpkBR/GvY\naHzMzLGI8v6e9WmNwMrWW+k4/hFx0ySDTgMVAbGZEw+cLjpwc6j3PVL66YlG\n2vPL+/yhRzBGABIqm2Ww8hrF+X9Zqrh+AH7Jewa+Nrts6C37jm2oa2PU85Zf\nw9NG\r\n=zKl5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICxlJxFq+fSLrL8jEHT4Te/bBjdxmGmv0196DgxghstHAiEAl7yxENclglnTm+mVRvVUUXMXmK8Yd+FIkJdT9ygXJJY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.3-test.1577747671643_1577747684903_0.1421892097741353"},"_hasShrinkwrap":false},"6.1.3":{"name":"ts-toolbelt","version":"6.1.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"af71c66ad1055a5efacb9aca60417b6323219920","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-H4TWF69sQswz2B3WQMj2J1pIyE1CerOWbnLe4vA+DC8JzLFPTqPm1yEQox7/7HZnplnyZbZ98Z1zhnQFSzNQOw==","shasum":"8f6442cef8a4494d71e1a9c73fb01eceac1cffbc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.3.tgz","fileCount":6,"unpackedSize":346887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCoWaCRA9TVsSAnZWagAA/xQP/jCLQtCy148tUq8+6HY3\nzwln7yS5ncAlG2Xe9lkZnFdgDQIZhZJFY2Mwy60D8KxYGLuxH/Q6fej5wF1F\nEPuSMTKAuY94G38wdSdrjVWFVE0qqi+Rj0XSlN8/adaVlIghJORnThhSEOLB\n/uHBgMG3lIEXY6z/YScDA6zTdPVB/yDUPnn0dJzJEkWsH5fUw//gKW5fo58d\nhaog20eMcl7JCnuQxGFNEBZ86sW02DjFyNdtFc9syf3q8g++6cnDQUvTKb18\nXR6VwsvsL0SJ3ByLDC51u87NdwXb7WHT+hrN/GZojtyY1XHXhqMuu3eP+y24\n/NkE/TglzDti+KGoHm6gryMtaCt8sBt9UHxMR9ToVB6GgnnRiKFBwtZfLqAV\n+C2ebd2jWP559qmPUbAwOVsORCwJ81kisWRhMRxxrHkSkAv6JHX3tCElPukW\nwsXuwb6BHVQUkcaw9WaWTICQ9s9ShhKrSWUg5wo7t0EY7WYz7AHSu2A36yNi\najbueWvG5NTtB6kdbRPstANQjxveyG/pGzrBm+4CyFT9XbxGEhFboB3M/RZn\nDJ4PMto0LBYP3XLyE5h0eUUXJsqhADlr+dW+M+NJ6ylg+26PkCcVUp2xAIq6\n+utPUnxTPGce81IupHeQq5kGmWUfbY4fUyOst9pTwxorQSDYfmEEzVdlS8aw\nk/md\r\n=0QWv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCIQbaEziHs7tfLk1Baj3ufsI/cerN05tA4XqGtC7l1wQIfVuGMI3cwfDPgwtrEIVQ111l3CJsDM8zwmYFe9UeIRQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.3_1577747865588_0.285346719693776"},"_hasShrinkwrap":false},"6.1.4-test.1577789091485":{"name":"ts-toolbelt","version":"6.1.4-test.1577789091485","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"05b275c55fd3ef3c8a748584e95d2c5892f07586","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.4-test.1577789091485","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-UxnGanKU7gx9c/BXRoG4anHzODaEpWrmseGX6jebxAjgOMP8RiqUel8OODfz66pslslpIitGJB1Bz3BuTRA4yA==","shasum":"ef5c11487c6922dd8a2038d6fcb37caca0d8c92d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.4-test.1577789091485.tgz","fileCount":6,"unpackedSize":347246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCyayCRA9TVsSAnZWagAA6FkP+QHT4NxIP0t6jdRRzEIy\ne8GNhDKjL+GbBhWMlsKOXh5kfvb+kT7vYB0leQbhuiCeQUmyg1uJnpqoTcV4\nIEh4S5qbV+6Y4ljCGu8eSYskD74inJabDtkV6Bc8ap86kRMUNxKLCk9hqYMo\n3M8Oh5r9IkanlNNCo/m3OrAFeA6Ee8Rzpk7AVFXY9MlY8KdgBOCD7PBy0INi\neuDqNxzFpqPFVJxobr22rZ8rO0KHnkbytojtHhHU4qSbTfTy/VRvUTHQdb7g\nbvFWgSu3Ecr5+JXIiImbjwILFLL2z6SOy9ZrlJ0F3dQxGM1q20gDPMzGnfz6\neEn1TiU5IHTBqMyFkZpjIxK2OnxyUGd+/a09uP1tLvQ+Nakhizp9sTuPZcHs\nNPMFglplhp68DsEt9RgLlhYFsmBfmPYnSiUggbmR/Q7vEP9VN/A/DTf6X9dv\nVO425+oExhldHJY2/6GGefHc50h2XwOLY+n1OZMRgZXc70x5s018wstn3I6M\nqMeGhOVTpLBDvUJOgwgyr54O9iIKmy0a/GCN7jCLg6ad2GA9Z8233pUMJe34\nhdEvsNztTG40sMHpPTwZQ5H29ASHFCZiXVuw6G5953+LkkP527tfOFU45iP/\nt98hCmH9wnSL6/f848hwksss7B7iwkGsHHt7tRu+OEndzWdAGgxX2D7YLNDs\nZCTz\r\n=KLeq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBa1+ZlJM7fDr582UprGNDJRll2B/65uhaNsYnnWK139AiEAl0/4wce4tOcqIiIUs0nrFPvqz7kffkwHsLqAAfJNX4U="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.4-test.1577789091485_1577789105634_0.6611940577610009"},"_hasShrinkwrap":false},"6.1.4":{"name":"ts-toolbelt","version":"6.1.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"05b275c55fd3ef3c8a748584e95d2c5892f07586","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-XCBHNrPBwv6fObZuWTel5S8BX1DChoQQDof0KC4G07b0KWw4gKB2ncdD+0zOpiIC10sK19qg4vcLgvis3pyv0w==","shasum":"2db14b2809f7569c5ddbefdfdab12e47aa4ac364","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.4.tgz","fileCount":6,"unpackedSize":347227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCyd0CRA9TVsSAnZWagAAobwP/iSd3bq7INzEoJYFozfk\nq6x6aopCfE0YDwVP5lDRBvctJLqEWEljJ02fw3LK15MmN581IGrsNQcb5jRd\nnDm6GqVcaLDfWqifmDAKmwFp2KPtrDo06YMP/Jb5yCB+jCxqvFv2Au/U3FVR\nwVYhsA11UWs7+jfNsxYwq1nMyk21mr1hbX/1C+qfj17osPW7JT/yKyMwNY6a\nX/9bJmEUXkJaX/12V+M9jXotJY9tS0KeUcenIxEIm4yHEHKZGYpNMxB8Fns9\nDnbQxdbRrxuQjhldfkUL0d8cjXWmJ22WXJ3rKPs9wpPfoF3ulfiI+WSbyT8G\nyiVXC4KbnZsC+3iNNv/1kJPc79zooTe3jOnc7JlNXRtMQW3TbkZsIAsQyFO9\n6nFqc4mRpuzfVCdwG8LpRLxovWlIzk0lQlO6s8SiCS2fPn/LJWW7SB4pU0Sx\neAJH6qbXz+DySq7aYDOhx3Eah4rY+WJUFQJRKBglfo1rshOmi+pAIuDq8B45\nHy11lSZPJ0/IhzZkgOk9jBxKeqLa/+wJa79/kIT9i3SimvK6Mj17i1nzOACB\nIjyZUFNUvukLO+++mK46kZ879FpSTZ8VbFANuo2RTPiFhj1En8yoWY773EA5\nlQk67Y1u61Yj+Th2DFlUG0bAhXdsJLRuXDQxLt7jtemfaByMf4mo+vJD/po0\nraif\r\n=la0N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDRS78ebvi/HyLr4gKoLiByCI/XR5buGZHXDxqJFcnSzAiEAwRBLJoDJ9fcQceSyIq78KCsiKGQJbvY0spAnUHUEybA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.4_1577789299469_0.8131253123046256"},"_hasShrinkwrap":false},"6.1.5-test.1577880067604":{"name":"ts-toolbelt","version":"6.1.5-test.1577880067604","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a19b22093c0505b2df1c255d8cde63071ed41b65","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.5-test.1577880067604","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-jCHDMVatlIbQXfth5UmAmbfItvJUC0eOdh3CUXo9wZqfijSUbubAQvMbtje91pVlZW2z4FWGqbuE7BFs4HAPOg==","shasum":"c76db775cb5b38c4e0ae166530a439a8bf0ff72a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.5-test.1577880067604.tgz","fileCount":6,"unpackedSize":347659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeDIoSCRA9TVsSAnZWagAAKs8P/19n4cSi1sYKjI8Kywdc\n+CcWxKVEPw04A9g21RoGkTGY1XDd53lq/nGhPEfbaHMfyZMcmw0S94+U8euy\n4ebV6ErW2kORbtRvnpAlRUQYtoRYtKm+veOk1HpaTD+te+J0ilmRFeYUylMK\n36cUkdhkb3jEmh1bTG5wJCmhqtwED5YYIcJfardvCF7IOZUrCDJ+44HHyuOQ\nJGOlLhLPIKV4ZZuvN11FbG4d8mOeAYM8iZg8MPIHs88TZ+ThypkuYT6eOXsm\nqUvP0hAYFllsgk7H/MXQuzETb61nrNF2UcQrlApzaqdztPDnkT5CpHnJFqih\np4SskEExgpy1OK/iRRMtiHeCbWwRSZeaVDdtDSfg3ujHjnJpS4o2sUVVyXnJ\nTSEjAF2lkHCIt6YFf+m6wZmfr8FPO06wbQrEKyJAFnyTnG588ePsdctBlv5k\nZ3xmH2vT7MrFhRv2MiMT178MqW0lRJKuAYEjA4i65Yz7uZ1IJOqvJqp61sB3\nzFG+okC+mDQasuVxGnHZaClXC7A4RwzTrPLVQvgmpewGO3IHyNgB+aqLMMgW\ng7Ke45082FgPrAiICz9ZZLomaWKVzD14K/d2W91rUiMPWtcunXP7wxyqG6aI\nkM5enjQCZmll/im1huETdBBfHqk3jrXp+LZEcr7lc69sWLUCoKJFJ6QEuR/a\n+wcQ\r\n=N6j6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGV3ctHeFar9GIZJWxEcQvStCMD2OgfyxCj5o4Dp+kHVAiEA5tbWgok5SlVSQkZH+H4jAiLl79swxzk5Ld7m/LwZ+MI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.5-test.1577880067604_1577880082311_0.2558849661230791"},"_hasShrinkwrap":false},"6.1.5":{"name":"ts-toolbelt","version":"6.1.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a19b22093c0505b2df1c255d8cde63071ed41b65","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-KXvqFhGie7NS8XKX+6/JypeG7caJaKzXo16eOkGCGxLa2OX44xbmWeuDAkBpIRfEE1XcxVt9H/WmgI2bAlvbIg==","shasum":"78c159d34cd4a22a256c0a053f66ac63ab317ad9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.5.tgz","fileCount":6,"unpackedSize":347640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeDIrbCRA9TVsSAnZWagAAVYkP/jVM2+P/afNwOTBPLJg6\nf3mXF3XoCw1gdwzPSvachpuVutmQYm5xUR54NXwRA9/fF+k8YhR98TpAHyKG\nkASbI6b46enhaQ4KCFCyJunLvzN1b4YFPk0NC4z9AZj+M96GL5LepiznI87E\nIZNY1U8WrFtf3kcFE0tBKQarmOSfSql+feM6VWRG8lwsCUfnFicm4pMplUVa\nvqWLNCcMU8TcH0uwJh2smCbR1ywNeM5N1kWjqE/4II2f6syh/pkIrzpejYKD\nRpEbQ/oHUXPDPzyezzsrVT0yiIxe5fSGA6lNPIHmFtfFCTsy2HTHev4RUZ48\n36TARN5JZ8Qnwq03+I82FGy+GkIlYQ+48fJcubkIKr5hXnyIeaV8OGe4VWOp\nCH/72Lacj7G3TVICrhOv0XGuIsAAsZD/LOHaQLKtMGlRdwGTPqWQCQMx55GW\nZ8glvdI/CGnmvyJpRxnGxTfVZA83STUGvdl0uGu56F3wiTJ3dfEOcALzP0+S\nlPx6wgruzOOklVA1oynL8uOTMDHotXKX8fZW7mDMdkoVZ11OoWHnBjUR2srP\n+LN3Jmnol5CqrjYx7tshlylrRcSP8Tofa/TOVFCI8gTcgb3kLBzQRXLqDAyf\nhJ6Ef4quZuDKF/UUKCUcIjJ8CnJ81JLZxvcVKbgCr5fyI+bsRFl5l1O/LbPs\nvduc\r\n=3ckS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/AeI4U7kZ9N/61RZgGomNzhdswZK33QmBwnApo5RidAIgVkhBOCN9U2QaDWnxgVe9q343BW88uuzgexKPjnmfh0w="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.5_1577880282618_0.7891689268039315"},"_hasShrinkwrap":false},"6.1.6-test.1578573636594":{"name":"ts-toolbelt","version":"6.1.6-test.1578573636594","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9a906d2286ce586219a6150edb20915b469bb4c2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.6-test.1578573636594","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pJfnFgQBtwyBw7b1ZSYwP5BqxEKT1e7iMNaDDzQiasRc9YehVGk40cgTdHnYhTDxGZWN/Fvb/YmUT1tGMjttlw==","shasum":"e6b330795b4bda7afc236e77192d0dc5e15d976b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.6-test.1578573636594.tgz","fileCount":6,"unpackedSize":347991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFx9UCRA9TVsSAnZWagAAI2UP/ieiCZViuQ71NKy/pvR0\ng8DrGvq8rmdwFgds00lHQ84J+uY8Hg/ns0JxyRyyOzKXMVvGvgPXbMEv45Ey\ni0MOCxy2Gk+f4HdMpM4iS4beeAsYwzCz/CivNMYsmbO2OzxtGWJaU3g1XOZG\nPhT7PYFUEEsc2cAqfBLJEP/RBvbKSPNhc6REm6St8XtvQFC7nJhAlBZgjsEF\n6TYcN0q56/scetLsQxqXp3Nq2oLFvqqCHYb57nedqpMUL755fsWzforbHApK\np6YkPeW5AS9FYAdd8upPAjqYunZVRoSONKEei0YydGFcgPwlzuAGB8+aPPxJ\nb55DXbgqAz1Y75p2EMMjNCz2kNpf7V/H31DDTgQYpwxnzCOP47A0xk1I6zbn\ngpAKlA1vGjBdkST/A6AgrL5PD4lAAau8BJScbqr7+0MjLIo4gH67bzWqH1Qk\n6pKWJ2GiiKoxedb4kCPtylr0ciGgeu9EW8uEPg80Ffb+Idb3ZTSFucP5O15E\ni8nivgexx5mQVD7mQH2g+P/kvfIy6fsVwSmjRu072yfLSgPRZ5za0B/cufqT\ntMzGXyNjkc/uHng1e0YAFyCEYbd/WHsBKHfTASn4pEpysyT+4+CN+C4qYpLK\n999hN1DNl4DCh3xZQk+1LO+n2w377RrPcf66Pv0jJ1M+d1XridnJsVpWfKmC\niKJY\r\n=SG9Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEzsV4IGZA7iNyWJA2lmurwHwb3luzo+SZBWcdtEiL9eAiA38vZOe9hkbTX/mvtXDGv0202Pj6Lgo5bOL1AzyfybRA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.6-test.1578573636594_1578573652238_0.9481967954314119"},"_hasShrinkwrap":false},"6.1.6":{"name":"ts-toolbelt","version":"6.1.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9a906d2286ce586219a6150edb20915b469bb4c2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zrLyrOg3LQlRi40hP8MHEXXlqkejYjBkX6U3ATY/NyBt0IRbYAJs8QG2meHV1HoRiTBMIgMav8ICu/IxOK4QCQ==","shasum":"2485059771e450048debd1d2300212da3e4ddadb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.6.tgz","fileCount":6,"unpackedSize":347972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFyAiCRA9TVsSAnZWagAA4mUQAJG+1ReMb42u8Xxpi8eg\nc08zV/8T9HQV2X0ZsOGVw9UyJ6UppKt9CU9XGrvwcSC6a3plLLYhazyEZSvO\n0msHtug4+0B3/GNmVPGpMUA+zPH/gCvprOpRzEl6dARxdKv8gt/NrFmeRQPx\ni0dT1DDuWmcUmBSlxL3SYHfD3StyYSaRWMU5Y9BiJrpO+sJoaUKw304nbQT0\n/wD+03MQL4O6MpozeFYH23z6gd2QxcAizrQorEhmMYh/oF6H3uzA7dQwGCwb\nq/HMzPBxzpZVOUui1ITs/asMm/8EzbJIg5RlxG6zN/SFpWZ/Gpx9NwBcoVmk\nAlmSd3y3reNnxfMLaGQcDsFDHAZBhWNeARRUoBGN7bmE89EHRpu1N2Cjz7gU\nEtWYds/x//NZwHVoRyL0ktC2mel2aA4l7hayT/+MgCRKfTdqXIIiS6LgcRfl\nzodJc7CWWEUQueUB0ihfjeZ3uhCuzs9V5ONEUnGudVa/8uSlrQoWH0kBa9HH\nDX3bo8xiQIWVTtxEpFgiC5F8TCzOGa+bN/03jM4Fa9zBoBPaLCPcQSq3RcaB\nbVtqWABpcU2EVmKm7+bctAVAuxp8dkuWXWc+7b7/wUGlmLUBnbyjvVBHAPBx\nepiZ1Dpb0qoGFPeEt1DEkcK5X06HBz4ytALzeGuZcvJdmZ3o9lfXFcO3mdMd\n1p4q\r\n=S0zN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFnRDuqLj/IGiv7cLaF437dw+1rpZhcqR0ZZQmsVYBxeAiAZXKpxb0/1l9QbJRBOZmUKS/wtcRBGu6uQNCZQtr1f1g=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.6_1578573857773_0.18970208131220057"},"_hasShrinkwrap":false},"6.1.11-test.1580388839321":{"name":"ts-toolbelt","version":"6.1.11-test.1580388839321","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b0e2fd7025287d9a76093fee85e16482c4b3220a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.11-test.1580388839321","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-y2OYgsQ3wQdSd+EAJItaWyAhZ6BRJs2Kg4kDoeq4gA57dcT0hy8ufX5dazwRg7zp0Gx0+0VnI0WEb0IA6qTmBg==","shasum":"68c1cde8d651898bc1801a0f79e8eee84a6d2a59","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.11-test.1580388839321.tgz","fileCount":6,"unpackedSize":348873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMtH4CRA9TVsSAnZWagAA/ccQAIexYLqh3hq0t3oY+Psw\nQEDF/CLpc8g5A3lqmyPvN4fLhTO64Bp7GFm8Nf7sy5P+3GIqolxfUfbCmgfM\n23uDQxf+I5WCjFMS3pfdWc0B0t721Zi6jNlmA6wd1qzFjk92LGuxDvoagADJ\nwGDcc5KZOK0saF+ZwvZDmbdUyP5fkKGnRAbmj0AKV9WiJW9hPofBE+93ICGz\nC7BT3hwgbuTq2m+wBVAE03JpoDoak2h7Ba7fAWr7MXBTtGPxZKszZMnvZ6Jn\nyQkuY7pBo+31dNAbsSpPy9PC2CaHFTR2RgPgejhJrAGpExEvf/Jvns76vZvV\n8f2JbqBJy9uCDnhK/KCAEQIBbhLaqzyDOX451WA3u9fsaGBf7f5Y7JkvftLS\njaQHoreNz+PdJ9F9Tk41eTZ9P9+T6UCVe+zNis6xoEt2a0yVLIiFTqVYSilt\nJCIDNdeACHwAq/udXYjbMuaimkdCNEBZfOQ3x8a0upT+UX+05Hm5N0warYKP\ny8nQu1AEo6EkZqtxYU1UitkTmk68bbcRRj5AXRPTAuTU2fo9KWcOka8t/y1s\nxrHlOnFRnx9bIT8NzujXTUQR8ITT1HN32d8BG9jlh6P3P+8ORiy/n8sX46Nv\nEfn9KvpQYOoHnu0WRJ46lZcSYdQhxSluOlR5cWg2oDAk0AHrAMa9VmNZ9hN9\nxZ2Q\r\n=r8RX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGQRFHiWNJMs5vhS6Mxc1eJdgQKkUITuqJuw3HSXcG0iAiEAqT7NW5fVk++K2kNvad7c1okzZofynQClYF9p5hDldAg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.11-test.1580388839321_1580388856333_0.00890537756740084"},"_hasShrinkwrap":false},"6.1.11":{"name":"ts-toolbelt","version":"6.1.11","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b0e2fd7025287d9a76093fee85e16482c4b3220a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.11","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-UKYeKqQb4xgHYpB+62USB4X4hoGYCETwBRztiX3BVHWlTqskM0cEhWsE1s7BaVWZKFvUXTUTQlaXepWs30L3nA==","shasum":"d2768e83a577e06e8c6f1252e0c3293736329e23","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.11.tgz","fileCount":6,"unpackedSize":348854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMtLHCRA9TVsSAnZWagAAroMP/jy9RKZZvdyHE09rDZmH\nXuXCSbdpfp1QQ8ZVuGWapNUjl5yQZ7qn48n6QbU5RKgysVZGNQWN3i9vvsOa\ndMfL+dW6+uoP4tar2w+nx0D3NgH1xtNFSdo8V21aUBDmQ0NiieouLBR+DEKo\nwDVGHlGT4ddxmj47pXmaM8WbtrmHvAhhOyzu+g/5H+NOUoPZbzKxOjbhgwDP\n94SxVGJUKaR8Im/lvsNGBbZo9I7qHuXAkKil9EuA7x97H1+YcVsAJDE2EFU9\no5nomjw3A3QJsNQzgTmLQmXTE42pX3DBlIxacyuUj6np0biJk7eoRoPtM+j5\nANEAFEdYrCsoEUV4+tDgQQnlddcqBslmFR8nDv0yheLJDetzhXt6riXzsvFw\na1bepHchyCfE6FV/BS+2OsVWcumLMvYOVL8ppSPIrfagX6BpAaMf/nGZUWho\nP/cHOkNIBP+jg+FDZTyYYQEgVQT8bfHNzcULxshojlG5IDuVkJZDluR+wgNw\nM92nANxILVbiByM7YKgaPXEHFnL95/+ziaP8NvPXcwdc7vEO1LQhwwvUC/iL\nn9q1gQUq+sG8wLAQgbO02fXMyGL0gzejvJRI2O5xNkzRQT9bkYS4PEtXA1mo\nxpLcOk/IxtZdJKz6Bb6ETARNraVbUEIpkzHToTxGEHJZPDIjybJL8Yv1vBOZ\nWBNt\r\n=r4Ib\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF7IyfK9RmQrZUZY7ZnBOp5uIktZ+5jByrmbTDykBiYuAiEAgNxsgUTF1LEGfbadmXiRYgXAKvcXDaWpoG+DECWWcdE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.11_1580389062748_0.9626916168684081"},"_hasShrinkwrap":false},"6.1.12-test.1580497278140":{"name":"ts-toolbelt","version":"6.1.12-test.1580497278140","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"10c2f09f6d91e40687196c2c2b10026b495c74c7","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.12-test.1580497278140","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-1T/CtITjpPxcGm9StzkicXEfJp9ZHtc5RtTkEQZKtIF42PQdbFObbgHk6GZKTaS+CpI2tBVOijlEP3q6cnAbig==","shasum":"32d0323dcc8b4bab0d68495fcab9d9d266d70009","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.12-test.1580497278140.tgz","fileCount":6,"unpackedSize":349266,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeNHmPCRA9TVsSAnZWagAAkCoP/iavdyCzl645751OJh30\n1df2mLjov8Vrf+HCXytmpe05XVBIkft+lA6FDQxNqHYRdIUAub6JuxMZdmyv\nsKWH4Wz5y6PfKG6jdUPMYb1x0SQpkNOSmiz7bFlrfOX75Xw0JZXj8xjKbPkO\ng7VjqgkSDelkAklEvUi9pYGAFNADrK3S7wGWGFyRrP1HfXmrFId27aDn5FSX\ny9RNCmeGJDEO/bNbPEZnPsgYUfEsYn3BXF1yrGhFzRpbf3KUFny48JlpSBXw\nRzo6MdLDcMM3klP0C7w1u19Iyu7xWZ4w6UdXatGSPTrCo9XhYv/6XQy06jnC\nTy0sSTJcZZYMOSPe39dpNykZQtHhg/W903KqGgRcxj9a6u0A+ZdGDSCFoA1+\niD22iU4BE1zBl4UQ18V06tbuD5x/eKdYhfmCoZOMBQkm/5xOB69MDjn3DqZl\nDnVLyn9vX49oNuNbbHuxaIjtOI6i0/4lgz8gWgj/IyqF9aAIl/X9N44LR747\nGTD6OnAPQdCxFMy2trcL5jndWapn+ROIaMm67wEVP+hlcoGaPl7LcVXBneYy\nL37WIN4yc7GpeRLbFcYqgP6eARrWgtWmWLXztm80LKMhI5GTUO4mFBApntoh\nrnUlBuMzy3ruXfWkqn4pgb65cWKchCMhGZu5XqYhDgtIy9rbOJUju8fQ0XXO\nXP33\r\n=lsPZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClLr1y06tVf5BrWfuy77EdXIp+7JSdJxMd0ky9fKiChQIgHUOcUbs0tCgceoioPWicywk39CozmlykpcvICOH5Ov0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.12-test.1580497278140_1580497294561_0.7003440664051057"},"_hasShrinkwrap":false},"6.1.12":{"name":"ts-toolbelt","version":"6.1.12","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"10c2f09f6d91e40687196c2c2b10026b495c74c7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-mCF/Jg90iiwDgNNNifafDS7myouiMfiVwzO+sgdwxgCB9UwJwVHSKsL6YY8KKfPllxbkfzK6zfJPMN7QJWY3tQ==","shasum":"20d49d3aff3166dc59c86527975108dc897711c7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.12.tgz","fileCount":6,"unpackedSize":349247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeNHpqCRA9TVsSAnZWagAAWKoQAI/Aq1j+EHSIUt8XvZbo\n9Vm3dzoOH5bNr7CchilS0wkajsUZhODjnGTPKrJel2+VS/UjBLaLIDgmuiAu\nc1zzV5A4ymTfavoNEX34YQtA+p2v9p/Yrr7UOpk3CwoFl09MQz110FG/IgLR\nrBILKyWAnnWFigz5V3ozKH1vLElnsNfEikgosdzYhpccknWL6/Hl1+V1Wq6W\nZjyKGzIAh8h5LHCmjRSqNYMpSQR0iE9dMCtqvA3Tkq/TI/6R5zs7RKcfpgEk\nI7e+wcHuNwtjJMWT5wot0/JxeOqfx0go88QM/aGj8HQmRlmF6NHmczDbTtWV\nrOWKFkL5agrZIMcGqJOiMLX2Vkz1g0yrV9bfRr+GkIGwcY/+D5cvNUY/0CcU\nw7q84ATMszzyYPDuHtfngyryNMcY7De/77axmDTwcEBQM69mYfBvzJrka2Fl\nQ/3cicHfcAw1d6i/HCsoivXAtC8eHuMhVybg9s4HWPvcMol2FLuzZqNFgnB6\nbHQVerQxz0AI8pwICZ/N2F1zQ9yp8jtEOkBlcITKI+7VapbnuXAhwkuhcNii\n0n79DM1ov45GDd53Bn5Y2KjIoM1s3eR8Jyiz6NQdH04iaVikmVtcK/HJWO9z\nptVMu/kj1uVUmvn2TE9MEeIGuPh7WkYadjfzT0ewRpEp79Do6pu8GFrmK3wu\nPFQZ\r\n=9far\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFw6j4cNN3kndsH9s/xvx+CgkRo+tR4oNfHqQiMXS3fXAiEApDISDgM2UJ/khF+P0uDiBgDBoEfMZHGxJxN8IR56PUk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.12_1580497513494_0.9463964965051279"},"_hasShrinkwrap":false},"6.1.13-test.1580507015125":{"name":"ts-toolbelt","version":"6.1.13-test.1580507015125","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"41e4a04b31154a4c9c0cf4cd24e199e4c1930f17","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.13-test.1580507015125","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/vD6aj23RJ3Tzj2yuWFJswX2HEi63CTdlCKshrQExstfXD/Kr7s5fBmbvUwo3Ev5CaLTVFbXPoMBGrhlPPz5uw==","shasum":"011057c77902ce8b65c639a7c63d2881282eefef","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.13-test.1580507015125.tgz","fileCount":6,"unpackedSize":349684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeNJ+YCRA9TVsSAnZWagAA050QAIgdwDRIz3/kS1+HOnSd\nXUnRo8Bw0pQ8zJuexCoPBYnFVfe5FOe0eXj4H5mHXM4bvz2EaiZpEawxfBhl\nbl+y2JNvs/3b5ieOU9it/93+1ktjWJDJbJ1JGBJBEJOj/bV3NcI5bAiRCxeY\nqQ/XLlWtuJm1/5t+M3SxMdyQNiPnlLZiIXXoroFojYWn8K/o0GIgZfOA4AoD\n/DkVjUqL+7c6fEwFZ401VE13sYgiAc86/Ca/sYFICGR665zs1wUC7sU+hMhr\n2eVSZiw125OjZvUIFI6FYJKHmJATOCzhKqPCT4qKblurK6yFdrP6rzqcLTEf\n68ERsSSP0nF66XkTggYdAj00S0KW6ZIKZYrSGSJKrUgN8Iy2EQEmuKBtqsdZ\nSoo52LhNNrV/lCOitQepjMbGc8pyanb/CVadBFVUBjlEFPlTIUQBgr13CfUg\nsCHMAncop4mX5M/xpMIfpxsEeTVLiE5A9y43X6Iu7WfNsaUXU4NnDh6l6gJ+\nFF3AriBfwV4M7j/zIgWls4zHVxESHRqK4ZAtG5ThCtppz/d0n9XrJ1eGiW+h\ns1I3+aPHLLFnMGPzjCXt3OB24+0zT6loXf1wUAgyTs5sFbIuy07Lz0D5S8oS\nE0+7NJIuSbd+wLjBFz6wLiLZWfE9p3AoS6ciKBVgC/ngshquiecOH8rvgbEO\n0Xna\r\n=FydE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHf5QJDKgwnf8eG6rw0B7oIqWmgoMO5MKClXEXpR5TY+AiEAu4oc1ofYLhfCd03Dojx6uUYeJmHp1C+ya1StuXF/IFw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.13-test.1580507015125_1580507031851_0.22216015852491844"},"_hasShrinkwrap":false},"6.1.13":{"name":"ts-toolbelt","version":"6.1.13","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"41e4a04b31154a4c9c0cf4cd24e199e4c1930f17","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.1.13","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xfhXvHNMg9i0+L9aALC5kU+/H1eaLl5yydMe6m+2Danmfw/sIX+ixF7JTP4XSQRaG+Xd1idoTmcCVI0QmqZllQ==","shasum":"12935bc8b81052e5e21eaddd35372e71320d7ee3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.13.tgz","fileCount":6,"unpackedSize":349665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeNKBdCRA9TVsSAnZWagAAX04P/0gIf4D3Iqnu88DQPLNa\nuC/kh2gkjVEYKXLjTyIdEUnpRmaztC4+JSgudaJpMQEhpMTTEs3UzZxqgHNA\nOj25F+ouwAauL6xWgrxrI5L+hCi5PW/HOVaoZtK7iB9gDP7/T+K1mxpUitwK\noIXyZNBbwr4VP0IecifBceAV+Vnpi1a9mvSHWNo6RgUUbH9SXb0b+YQuLiOk\n23GJNG7Usf8BoCbSN2vEzIphclCQdVH2PfUcwNz7RU4EZDHKBtMQnWC82ICH\nR/VU1CRaLObNFNy4N34nd2k67RFl5w7PhRZa2R8DOh/rHy3CiOa/ImlJ3WHx\nB1j2Zg8FPF6cknyycge8xiyseUTbToEtYA0fva38YgWBGI6TzDbjNg9YZUib\nMzvuPXre+KMIJfeujUuhDVF0/AWSxq3R/xcQdC8c/ukHOqfGsWzWp3RpoNmE\nsL1M6ZHkF5USVb29N6Lm4w+/gpikzD1H8fEbl3r3qFTw0M/V7AQUkBafvRwV\nQ0vo8CzCsktzCQWhtThi/UQ+7Kg1n0rECagn6zfNkt2nokx4qadoLOkUfeaN\n/JCGVTl/FrALikYPQKgffbP4n8r5EeoDO4yivgmwFEWjc6AACBA5Mego6dEb\nqRuxGsC5h8vjKXgNvqiua+OwwTSsJ/SLWHf30KaZjTNOE3mNxVgFnIJi2mT+\nkfVE\r\n=BbCr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPMHDjoL5X9E9qpkzfehzkQubSI7bT7dmdtbirckfxzQIhAKhQP5C7g/VBnKRTfUCQNV1gJCSRXjTsEN8FstsB+CUj"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.1.13_1580507228685_0.3497476916589637"},"_hasShrinkwrap":false},"6.2.0-test.1581605452512":{"name":"ts-toolbelt","version":"6.2.0-test.1581605452512","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"7c684b4734dc7ee04a2e33ea3e02b1c6046c41f0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.2.0-test.1581605452512","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-MmU7quOLMfx5bmFK1ncSFWhXSvNgCJ1+hgd50anP1X7crwFZlR6cOVqhGyPAOKRSFmDFMRYrQYJR/0ohd0braA==","shasum":"3cc4299fe2d69ce0d7d3cfe47526b3fd0439193b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.2.0-test.1581605452512.tgz","fileCount":6,"unpackedSize":350551,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRWJdCRA9TVsSAnZWagAADjwP/3XTpfED8FM8DKZqNIJw\nBXAzG2EDtWclg65JXJcJWIf5pnCaDqF88wkfCdJ5iyzOV5SeH1Q6EVPi/yLg\nDVh2eS6ZuRHvkmliYAfFxuR8lq2/N0nBHl02LqUiBqjCWmsl5Y74PT3RJLrL\nuNRslv0TeHBPFS5aiXnhjTlBZDKrhJs+HiSloVmhw9rWmW6dF1WpnCtoHP11\nVGDH9r1Xfc3rXVrCFaCxxW5ALiNutMxACRDkh4oOHlJfxE4vDlWz1YBeBptv\nK5KlzNPP+DGoALd7fodcWvjq4atQMkkFaKGE8udyeDcIoVQccfKV8f4XvwCb\nkZiHefZRS0tOAWn959eEj9OvMkc58b45hji9mppplp9+mkTtA6s0C3D3d/Ys\n6MhnbXuZma/VmW5Tf8iAsFh+XFiJQy5/OcvipNiYTphKcDj2OtqaYTJ8fRfz\nrrbIo1ztNAHLIZ9D9jl9N1wkKlgFLQ5XqLEf6eGYjpcuxDfKs/WV0dGqQ8SH\n+5FpLpKiEccKG9vmB8k0KAXIlfUMIH0HuDuXskF7tQSSJMKay/eNaTxaUNzN\nDh5zKjwBSJZ8T3DJ/eROZ38iP8KqQ0bZUaJJVY8jQIgYe3Wowb5101JxkB7n\n1tXgiKiz+XSYkniukHMPkxRCABR5NTGlS15kjHqD/IJAjnWP3Q+Kx+WXz5VW\nbJAi\r\n=BOK0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHufdC/eWRf4VstiGbe6FqGaLQAMt0DLearK8nTO5HauAiEApnRKFwq47W5n0dt6Ztu0TX+oDo2cqgWIIA1cFzS2f50="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.2.0-test.1581605452512_1581605469048_0.7684933943505623"},"_hasShrinkwrap":false},"6.2.0":{"name":"ts-toolbelt","version":"6.2.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"7c684b4734dc7ee04a2e33ea3e02b1c6046c41f0","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.2.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pGcxdqfLGZzqhZXFgrcsSLTOQQf0hT6Hjq9OiTyyKLwvfgAPw9jBZj8WIbnHMPOQIsLudZLSgz6ApUncccdlGA==","shasum":"b1cc57b0ab115647319fa6cdcbc7eed93cded561","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.2.0.tgz","fileCount":6,"unpackedSize":350532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRWMsCRA9TVsSAnZWagAA+NwQAIuARnexx1FdiG2hCP+x\nK3fvqtVQTTziqAs+yZARTVmktxpz0OLyqZ7XzmDKgYv4b8vbqyhVzduv8mUf\niYpmYFovoIldoMF65la2qVmj09ZXZSYlvj+Q/bxXhOg4TwGL5W5RzR5J2OvZ\nGk3k3YCx4ZzJ8TSKkmt4IODtPnudr2geN9O1+QZyDuJVmgPguLgTI9Gk+ZwQ\nuWtsQqz8ubdkYYnrdS+jlPb4JcB/BZVnNxNELc0BWDzg/5Zpye/eDQOB84FS\njOsRSrZkhBmgKzBbjNd+5cmD8ST6rsxgqamUwbm0sQH1Qs2oe1iAWilzwWbm\nGHxYoLvGk1lRD3wiFRZVEQcIc6579EIQPnCXgENhmpw15Nr5X0QuJ3N8i8nd\nWftfsAE2Y6L2bwXkQZd0fYNXuJAW6W7iBrkilnc4+VE1m77UkgpoE7lTYK6I\nO/NuYwyfdZSeLc1n0E21TCq3peP91wJGLmGs6IX3N4eyQskdAZ5ypAoCY43o\nXr4+EvUzY64XjcY2KRncGTvsDQxOmGZkmEQeEYUVv/GTMsIIuZJ2Opcm6hCy\nk4WAXKjld1nHC9p18pMav69PhpjG2DW1JiQvxwmhMYN2ppCOF2X2OuDYRE36\niOqOdnU1t9TmrRd1iMbHG1vVhBvtFQzZm4/hjZDgD5RovWhZxvzjcjDio29N\nByo0\r\n=3R9q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfX4ipSkP4EzhV/zRjCv5Z88Sr46WBt4BcMGCOPsR30wIhAMbYYP5B4DO659gyTUXbwe3oc6O2vg4v30ddwcdo+9V9"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.2.0_1581605676245_0.5501921969301393"},"_hasShrinkwrap":false},"6.3.0-test.1581860785440":{"name":"ts-toolbelt","version":"6.3.0-test.1581860785440","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"cd257b43c729a2f3e7489fc9cf1eacd5dc105ad3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.0-test.1581860785440","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-9ULEGuu2/MQBUVaI/w24wkz96L1LE9EcrzPN90oiqlM4Oy5Brb0BqxjvwUJs1ydSNuQJSH2Iemwy6Os0c9hWHQ==","shasum":"8b81bfb85b9ee27b41277240ec698c21f89c5313","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.0-test.1581860785440.tgz","fileCount":6,"unpackedSize":355164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSUfDCRA9TVsSAnZWagAA9csP/00WI4hmLP4lJ8Tf1kcD\nW6U9ebrZjJfDsIIkhHpGGf+QkY385wBfbEfhb025+tsP0t4wJh7qwG9EfKcT\ngUX8COlGMoaxhBGSOipckZeKu6p1wtieZrEweCTSDVvMOILurLLuPcgQ7cj/\ncjGvQT2Wr45x+ee/N5yKcVj2zLO+Vi5tS/Bk0eHDZtnaCBXi6Tf4+zuRyIU9\nXv8jYV70IbJE/UngSrsRcMHGdeQa+Td8e32RrnRThTs5A6m+V/Hpzepc2vR1\nXBH8peXmYKs00Fg7ZeBq9+eiUaniyWOOSK91oRvlSfcCpAXnzaiO3Ol5B3dJ\nbYE0FCDqY1pLwDZlyDQr7QaZ7vmaY7RzU1wxu/JICvvCfa6yFpssKeAF0+XV\nvrwx64t1uCaGZX/i7hj3eEYJkYT7sG4shf35kSNxPSmbVcn3AvjGeOlqPh3O\nGxQ1NjBzS+toDHo4o73ETxhR6enUO6J1hBRUe9JGLjIDUCuyNm49AGG63H4L\nlb5NQ2Mv+yQg8ZFjzfH9vAA3Mkc+ZLpo/Fqwx4cBSX2Om43C9jVafMnoarrb\n8UeT8UUPRRZ0dyYKXqhRTADerTtriWBlieJE8FkjV16pk7nLut+gqjuy6REC\nEXJjS4jjoJxIHm/qUYcKmHGsNi6mPtt8oW10I5wTQcxdnNjWURacFyULEXIw\nYddZ\r\n=UIiL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGexbdNL2XiEeVDFyWsz2s499ggCEGNBMPINmk2t3QULAiEAnhH0UalyejIu3FMk9P+yqIMOHHdEhLnc/E/HTstjbeE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.0-test.1581860785440_1581860802831_0.3984023826311833"},"_hasShrinkwrap":false},"6.3.0":{"name":"ts-toolbelt","version":"6.3.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"cd257b43c729a2f3e7489fc9cf1eacd5dc105ad3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-tm0LbFonuwKMLll9duP+/DQ9nHA9xU+qPo9OrPZWkRZ9iBDp2IPEcPUUSpHGVFckpElIgf9jx1UOW3wzUDLP9g==","shasum":"1c7d20841e3a6272117273a1574034a9a80c316c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.0.tgz","fileCount":6,"unpackedSize":355145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSUioCRA9TVsSAnZWagAADkMQAJFRK0iU3/4ur4+1cX5h\nICR46xEQ0fYFzcAP8k7AerH48Ug9m/E0ztqMCSkrmV91cYutlb3yKxfVFsQF\nWMbuBJIWpphJEBF09GUaOkLMDF5++d/M8/ya8SmuIDJ4LJ4k+PoBkSQCqDhJ\nhz7oua4t/mcQq6JZ62wLycbtIpGJtu+KL9WxRbUbKdGxDPr+n1x9AyRXB2kF\n9yLWTtKmAqY+z3ca9igz5bTdroHDGTlZZVTT86fBURV2+YgVaTdcUAREk7Do\nFOdw3rD0mPGvTo1oz2MYmoFwvkl4Z5XJq3HKjkJLYzqI3Pnz2hV6XHdcwVU/\nYWB3v5LTku/F/y0OKdIe75zdSiy7sUd2vpnuqf51mTv8yVqJxFlwRVI/72oU\nDix19nTy+EhdoaTIY4eoOcjVbWbaHbNTd1v364/2O8UG77TVZGy0h85rgF1t\nd1XSkVuCFqs2TP2Hqw8wN/6K7OzhL+3fRG8+0VkLrf2frJSUKX+rsxevSjPT\n+3xf5W3gL3UYLJzMydwzbZzJuWCbiZSoEogQv1snICcSLw49TeHhICsKJaTx\nTUsmg3ljC0LmGh04D0dnH4ejqtKuz6Hu4ekbeSqQGQ86vJveiUxF6yYHRAIo\n1gl0/IQTx4dVhmnIgV1+bA/r9OfYGuHyKpLD3X0iKgKr7frX658C8X5MSsIM\nPbbk\r\n=kEto\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE8f/5wqLTTZ5ZB9TltjoMWA6UzSOv8kdnuhJZRv6oD1AiEA0+J+0EbrfzgvHYvwDN+ufoT8X3dlN4hWPgC2AiVbjFI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.0_1581861032152_0.18292761352085551"},"_hasShrinkwrap":false},"6.3.1-test.1582196551623":{"name":"ts-toolbelt","version":"6.3.1-test.1582196551623","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"aeacb896e4a7396bfde06e8be7db9534c091ed5f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.1-test.1582196551623","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-6lqFJtStoH0YDAy18YtUdJUEiPeBcPZhLmSnntd/UbMdfYoDnjVylec3krwbfa3odEb9y2Wcn2OM1c5WQGR2IQ==","shasum":"784e2025a56248a82e5007e07433630e7631915d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.1-test.1582196551623.tgz","fileCount":6,"unpackedSize":355654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeTmdYCRA9TVsSAnZWagAAPo8P/je5edIjHTu3DU/+pt6b\nCpjbtT+yQ1A0CDg7v9MHTcUzcplT+YhElyq5awYxKfQcIhIMdL4HUM1xC6vm\nQXA/+PaX70BY4xMh+Q0EOPbMw8OI5eMQQygfJYpjOgJrnAVr5L5yri0USycn\njGBgSTVY9Fp69ACXTWvonsjFJoATOse8t5AWa7jQwnOP4/SGjfSqPh3v3M4w\ni3N7+NQqXpk5t2q8TqX99gQuSsg2pWh+6gTPQzewPuNZFO63qfltbMsAqsR1\nnLXMR0FBLIjYxAkPgMA4tZxPQM0/ycr81+OW3U1kvCJYWy37+TIIUmfeuUyO\nb8ZK6rFKXU1/bgE2K0xAhCddQF71sFoCQqVlcfpaWic9KVEHvqZJLNwoZGCx\nYlW2QoczDNnZjkCe3r59TIJdmPYLGF27nyt+JcWZiJH/wFtP76TqFWsJV+m6\ngOBPlErgSRxm6P+sAvf8gBAH1n3DZbMjz849QnSKgc7wqQWrbfq+Ha9mGBx6\nD07alWU0Tx10I1dI3kzXbdtCR7RzcLOUqNj23MtpXVXv7E4Y/stW3nBTRjEk\nWOEZ7npa2t8eAYMRkunnnriZXqtuk0pWb+jNamCjbB7v2wWIuTLzuQig8fJa\nQm+w99p/u4FTtUm6gl9xLbHkk/QN2b1H2JqB5yWddajoFyK9K72xHcmwsp/m\n6IPp\r\n=25OA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNHf3s4U8zihK95D0/5kYR/8Pqm5bLIkpWPpaJQWHLNAiBfoz7QQfBQEqzhq938PCfID1DGZzHj4+bi9ckq0e6GEg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.1-test.1582196551623_1582196568298_0.26522546680750736"},"_hasShrinkwrap":false},"6.3.1":{"name":"ts-toolbelt","version":"6.3.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"aeacb896e4a7396bfde06e8be7db9534c091ed5f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-attPczqCUGdEVa277nIBw1g3b6g7VrgtHNiaNdNR4KS0FsjTs8mXLJBDbBEjvNgcT2Od3FH+QUPRLt7I3Hi3cQ==","shasum":"79afc6e6c016736392f53a6e41784c920112256d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.1.tgz","fileCount":6,"unpackedSize":355635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeTmhJCRA9TVsSAnZWagAA29IP/01GLWUIWlwTKbDcLwKr\nDphQouPjUNTao8we3tlHQo+Rq4dDOs+klCTwXShoHF30K8htUSWuiZVH1Wxf\n4S5KVQZ6b3/FwGL2o3wtH8+zBak2G0tenPSnqlSDpb411dZNSRoY5mRRayL4\n2SzJ5oYwqaarSvYV7JHijVU5r3PtsA4gKc1HYd/Ul3a/gq/3X6dIp4IFj/Jk\nZeXPJF6ztAC6sZMisaluB+1clP9nBp83hyAyRxMI/RguDvldxE1SK6KnkkV4\nNlZaHMJgJU9ih3ZFkmy0OQkQNDVKhMooKYYCizgpaJ9F/oHUSd6XmX0lH5RJ\nI0yoEQ2HMGqjlEkf9HrYm5+vFFjUe85oxTEi8sqfZjouPURqRiqVjmcETJPG\nyf29tGwsWv+Oo9JTHBgimbY4SBJC+DTxb3O4UvpsBMnbHcWOZ4WmRzemeeBP\nmdXjINiKUKQNqWB2H+xjhxB+yaih49MAjwHjF5vp4O9j2OHHqcXZMSCl4eJC\nzmcvAhTookAGYTQToPTDd1+jD7c8MN25G2gR/WwxI0E0zkAZsYHNMV5cglTi\nyJ7ZK8U5Ci0Q+aeq1uenmj/Oc/PtTsEn89KYU885x5ExMujBKhTGy8USoDQB\nqH5Fsm6BsFKG9LspX1p/33tbCFPzMWDoz26JS7FYMTMqaN+PyzoeGlzkAv7r\nWt+l\r\n=1mij\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHJMva7J86Gg+c/9BXGl+ZP9c9Izw4DwenntB4GrklMwIhAKiUWSBEMrMW6vyHkwb54J1yHQksk0m0lpnmZ7YebsOx"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.1_1582196809131_0.6267330401857834"},"_hasShrinkwrap":false},"6.3.3-test.1582724068354":{"name":"ts-toolbelt","version":"6.3.3-test.1582724068354","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"bdc9dd92d91d82ef6eb7a19c0efbeb906a36f3f3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.3-test.1582724068354","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-H+Og0EU7BzAMcyNw0ldOvLR8TVh9HBSigUt1VBh+XsyRs1tmdQRhKqXkBf8hcQCv9OmsjPvGmBJm9voyZuQrBQ==","shasum":"cf0e48d4c79381eb6bcffbd164a1f566294a30ca","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.3-test.1582724068354.tgz","fileCount":6,"unpackedSize":357476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVnP2CRA9TVsSAnZWagAA4UwP/3p2LpE8EDoLa9juYs3u\nlLwhrsyw1SMAQy2BiBTIBkTqQXAOOV0aICKjn8mQxJ5phjsbPx3h83FNQsx9\nLjm/uyQh85vPmEXYeEWYpS6syUtGgzwyCy4LEXfPGE4csMn0FSagt9AanZgy\ntZp/d0AAmE0lomME0/cujPjMhv5WAiL4obKOe5TwlrnE35LB8pDzmOxvpH+K\nk1E4LCm4I3KOjxQgk/YuLfgMjPBI6l5B+1j/kNdzgfGOzj4tuPBNI/VN4sHM\nSW2jSjzfQwBz+gfa9oXbAnD8s7L+nfe4dkK+UYX+deB93U176E5CH5AssaJB\n4ReZ/04m7CHSX1HGBapoCnXWKt2i1MZgMNbiDdqbSDpZ98Cvzu2ViSa4vYc3\nsGJVunLU7lRVIr8HGLVNLlroX/OruNEqOf6TPrO3Jwnx1D42iHCmx1DTP7y+\nap6W+UvGj/MN8MXaxrxW6Iu6BkeCDLbtR2QTI0RQZVdvckFpnsaLRth0Mq3o\nF0lO8hzvos6G04sJV0J1g0tkZBt/6rtPWQt4U1omp+BkdQTZrf6aVrfZDRym\ncm4jMssUZEONQovvuQP8w6FV4szGRA0ez5w+67icMWpmojoskmFKlokJhjav\nY6PAwwlQFgs/ktmGZFn1Ujb1sjiHPmoguzWmK+YAxwkG49hwM0pjRkRNa0CS\nbV/a\r\n=EFN3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWnbOU4Ob3vb0Z6zJBmr0rARQa5n7KeHSncuNhg+MWiQIhAJoxE7qKwlJEjpGmMXzZ19tZymXHfK8Awxtpdc48NfXr"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.3-test.1582724068354_1582724085796_0.31476132218847286"},"_hasShrinkwrap":false},"6.3.3":{"name":"ts-toolbelt","version":"6.3.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"bdc9dd92d91d82ef6eb7a19c0efbeb906a36f3f3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-F7zpMl3zSPftTrhAJ1tlVkIKvqUSZWENeE5DAZ3ZHn9T0lDqFEPRkCip22A3To6SRdFmGuTOwySicfyQ+xZOWQ==","shasum":"973a409c94ba129382facd67b35333de7c09ff86","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.3.tgz","fileCount":6,"unpackedSize":357457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVnThCRA9TVsSAnZWagAAMuIQAJzk3ePVDQHyX+Pde2sQ\nsTVkn1tTTaNwcbt/w1jTZSEqLV9e7kQEd3Jsz33RenP8rivp93x5ZE9OHjpd\nkWqpaJTl/Rfch0k/JhsMsndmDLATnCZqgHiIsJIx4YrAijrujjL0tAfvvRKr\n0WEFv8wHFXLKFfGHi78xWCjkn+GgJL3AC+uEqr6bwAbqCV34LW1GMcvbaAT6\noclM3/4EtVq291imMswfxULRYK6wqhoFiflba2aXD5XnhDZprG/8hnDGm0Fx\nlhalc2TuzrwKuBPjg4FFEF21ZwBm41/65OGsIvLdbLTdonugYdlRdRSJ+9kB\n2VqxLM3FyBQRjQNN4+iR3jFcuuMzjN/W+RdSXrL6ZtmUXhDbSzHSzZtoTF/n\ny9LEMOmAAAyyM2Oy5n/Qr3cuQJAg6vEtDk6TyVf3wkDd5rJedsWwfDBbmbKO\naJH5+eU05sXoFCMfQf7A90q22US/wopGrgl6XSfwbJyKQTZfD6mF1YtTDJbx\nQ+7thjhzUoPRiSBM4HeeNiBkcMIy2F6T7KmkixPaiTIjIRHOzSdvmuMLcGRe\nsQgLCjpNpPOqUstWni0qmK89Bhk3fYDCeNuAIp/GWCQHTnhQWWuCNZT3YbSU\nb2StfGt5Ry67B2V2Fdk2q+oEEOMtqGxtXRvRHhb3nqfHDMhA9R3f7bGRbJlk\nRPy6\r\n=WJ6y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfQyVc/E7Jq4Gx4X5Ndoe3OuvIRlh+BhXt7uFGDwTF0AiEAiGV120lGM2cG4SRxQB/E51dwAA2Y+GBg25oHJiT5Gok="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.3_1582724321206_0.7350933395963173"},"_hasShrinkwrap":false},"6.3.4-test.1582724693767":{"name":"ts-toolbelt","version":"6.3.4-test.1582724693767","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b9ad3fbb4ab0ee2716cf9a2f9eb381ea9605a657","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.4-test.1582724693767","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Py4OTdTJ5c2e6x2SunJkOxUh7YzQ9hYVsINrZfFYYchkO7BBnKO+Y59OMHDnzNMeKsHt8yPPNCO7TZQjWeNJcw==","shasum":"c99cffe05f8e593e3928b98b34cff9a847b134d4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.4-test.1582724693767.tgz","fileCount":6,"unpackedSize":357711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVnZmCRA9TVsSAnZWagAAI04P/1kh/R3N5/GcTTes1boM\nkGyeIFW3Wj2cy5BO/lt0MxSkgOzhUyx2562jnqRS0X7pr1WGMbwC7VHzBi2z\nOrt1qUP1AgpyXTMfouGIo3rmWC6IQv9fMziQ2MA1kmamFtz5PYEywJDnzUlw\nBtL1P4BlOS+QS21Z7dfLTSLcgbvg0tJ9gxtI/SeQ61fWsuI190nRL0BE5M61\nluo9CV9k2ofgzOlSNcN1zuf+u5Rby98crEIzIHVkkM5oC2OZojUbg0PgAz4V\niHx/ZgnDg6RXCZiyJx40tHNUsI1e2c10S9G7DWprRFrm4TOcL7J1hColJuoO\nDqEe82ga8OuVkIey9IqWHdEl33zkghZJbAWmjpxzJOACDnTxoDdqSW9IaFyw\nr8VeduC5yYlcesvAezK1GXPk/L4cAzmgMKwU7bgVhWMpWW7jA5tCWH1Cpbta\nNkdrto21O8LAW2h+5UctwCDJ9bsFZvLqtSiOEsun/0mIgICkwo04jedXSreo\ntLtpQlDyQ6gHB/My+wIlCQhOcZ7C+dlQW4cgPq1SaQ8YAyMMAUf9TrsADbsb\nc80TgFM7aeYusAwdvXiRGGi0NLV+2QhqhfDsVyBqFRfbRaaX4cgKOVVJoWFy\nOhw327bXo+w/K0pYHJ8sww3L91W7/k2YLxJxHzBHx1JQ2Gjvpgp0tYMGNeC4\n95w4\r\n=0i13\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAziFMB6im4iYwsEG9Oj6ilvXanLBOsNRz41bfkLIiSFAiEA9j86V7r/PVWpEu9sxPuhPjV03QFIwhXMc8UYGXjm8iA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.4-test.1582724693767_1582724709949_0.7763251617272091"},"_hasShrinkwrap":false},"6.3.4":{"name":"ts-toolbelt","version":"6.3.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b9ad3fbb4ab0ee2716cf9a2f9eb381ea9605a657","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-VdElIh9cb0wBxnL6H8giUq9OCbBr7gue/bnQGiND8cPoukKRMeVopKuUa4pxtpbz3cHYAEbXuFT15/T5qGQv1A==","shasum":"8f8c4122cfb6fe79186556612784db6c249396c1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.4.tgz","fileCount":6,"unpackedSize":357692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVndHCRA9TVsSAnZWagAAOHgP/RMVmoX6Df1AfXB2Vs4g\nKga4gulu8aGOoueui3B2zzwMjCLqx7MRz/rTwqSMWqwf6OehBpKxCVKzKx5X\nBzmjHI1WDfkTrT/ivtmBj5xLk4RCMs6wAi3FzSar/cIx02eeBF/ksYXn7XxZ\nnPO2b4uYDyAotXEoUpJPiQjMRV/YONS5mthTohKKC7bMr7F2VkwXOU4LFwoK\ndcQkYnAjm8XQ/3wJqjVNQswFxebferdUigLssVm5esEKLO+21wLVBbV6e2nm\n9KpZapUhVT+L4D9FPY/yFRTynlrVPyOh2Xe4HKjZuA/Obo+LtDYmauEi1+Ux\n3VFNxp2aDigXPi879oFksl1PxMHj59ehk6P/aOp9zLwxqeq1vIIE4JUKrVmU\nj8R94b+qA4/E8EFf7uwBosr8MbT7iV5Rhkr6+c0xm9gIJ2r6OiwygbbhdLT0\nQz/eIS+rZXFGrq1m0KDFUDnhMtY1QDttLvHKdYC8W6buLXjHkUOMUlIvrmTG\nVdFxw+kIbBH0W2RPx0i9xzgAo5u0azxDHgxTKZo0FDLIec6W6A8gKjuCokAO\nUtUwZ2BDxwjIqyyN8zBxQIN+REpXRgY/lOk+/wqdZmmZNWnnuNJwaC22eeFu\nYZrgMim1fs0BSaKCI2Z2tR/pdRKkLm2JR8OF7D3rUlws5LsczzULi+8zb0l9\numqD\r\n=L9LN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlYUZxs4V1RQ/tMuYgndrpSTifZdCjzjpWtdnhzcMIAgIgV0lcFPRDUS6X1fdXg4b0AmAFYAe5lZJQXHH60Smsjqc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.4_1582724934751_0.3619814392606293"},"_hasShrinkwrap":false},"6.3.5-test.1582749114198":{"name":"ts-toolbelt","version":"6.3.5-test.1582749114198","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9dc6f62a450967cec990d1a56d4d3549353545b3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.5-test.1582749114198","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-XpKJuhKtRHY4WM3LUYSL2UnkNoSoQiQ5u9FWHFqYu5LBWDrxfNXd6Uy0DoQoW8E00xkt5VzOeJ0ePFxHPKA8ow==","shasum":"b8d981aa7c2b2d9b822428ce2b7a12d4e00f914e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.5-test.1582749114198.tgz","fileCount":6,"unpackedSize":357971,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVtXMCRA9TVsSAnZWagAA/SYP/i1kHzZVQhZ2OO1CYnqO\nlrdn6c7fAwJD0cAY5CurkiGCLv/r5RkRM0kpu8NTUMf8bYR3BTNahpItlz//\nER2Hz4f2rSvPgf+MZBKDDQ1tbU7dt1ZMB5W2V9TpBii6R/LjGkFTaqMOBqVz\nI9hu334nnPs5RFQdwDOXc5KBygnG3NNGmB8ymj5uL2e+xn0La9RuCgiLRQAz\nxDupFvNGUhd53wlAIoMk7l+s3u8muAR5PJ1fl9WRl/T6VD4FYzEIf1voAqj/\nHbOpklJOnvyfp+pvOAyjMw5JNzUAvUN+bJJXtHtKe2utCqJMLTqWK/iELObn\nfiIxiIrT8yWd0xLPO3FLihxLe0jn6dTVvI/+rBgCVt7YPa3gp4UvV0gSeOMf\nF/kOuM9H1V/twlC1TCXp0EgtEwH5NRsG7gcl9HTAEKNvxFTc6MsDMzYIY4Lg\nyA5SgHdluXn+/II8mD6vni8M5sq68lpnXo4UQ/6WUrGbe5K9bEK8v+9csrZi\ngJHgpypExeCT3WSCnMoXUxb9F4CuYTpnfbmb0eE1kJ5yVO9SjFq9ZRTFy4ie\nPh70m7s+b+fTAtc+Ej01FmzTVPppR0uLhdnB8HOgpsUfwoCFLdfu3P6EqW/f\ncOtU/XLD3C9cH9qu4BiajouxwDppDylm6DMYif/CqBZXR8yhFYCQisdvaVDT\nca2m\r\n=vpcT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1xqG1kRhFhJ39AY7xmEuVWTgYHKniIs9MRVCaiE0XJgIgVGckXEaJXbMQSAwF1ab6U+TizrY0yqf1zcLeSz/2q50="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.5-test.1582749114198_1582749132240_0.4820694935230003"},"_hasShrinkwrap":false},"6.3.5":{"name":"ts-toolbelt","version":"6.3.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"9dc6f62a450967cec990d1a56d4d3549353545b3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Xvh/gvBBCRU1qGeholaN8kgiwBH4neyun6VIDDsJf/jNwz4PXyR8ZY/5qdpB1DuMBrWMG2oTT1oWcOzGPOnluQ==","shasum":"5cb4e0454ab954faa9b6e4d5bce366fdb262e364","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.5.tgz","fileCount":6,"unpackedSize":357952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVtavCRA9TVsSAnZWagAAOGkP/0SlW70I0M5ys7LxIbPq\nUe6kulHaviXqxhcOGTr17JtWNtuy7VUcopjZxv7qInxVEtO3C3XrWBECqBIP\n0KrV1N3AHl8+ZPNpg9pMR5UEbAGu/6AlxKlP8C6P7zeo7Dxd7x/aR17iVfKZ\n/ANUBU9IQhn9n+2JVIZvaclCWAbOfHIfEYyO8b6/gS4cmRckcRylbJrdn5tA\niET90nU6Jq8W+BKJoNrj5IfLypM8xw+uVDksKPd7Pg6pdvakjATKeqM+FaEC\n5s4uxDxTrmoV5vd318v7sjUym9iIdjA4tozz7H0FXc/yp/bS5jQbNiHYp4tF\nhEE5YSJLHMUbKEa1r18DlAAY0zF2o1D27f1uHeYTHGnluhw+H5Nv6im51yzj\nTSTzcXVdzjfsQvQZ0lOAK/AfaMNbhGa/xR0Ok/Oh2BpYRfkdA0LyqrBqJFyg\nd8Rn3gzvPGafQx3qcVBFbBCCXknc15yKRoFnsXjtNALVMD+B1QBQ14u9DFQh\ngjHUcICrM7UyMmdBT9+SB6e7Tq22mCfZrdfyPW51bUoqO6vkrZVYK/PY5sk7\nhZMQM+vBJBPIIb2lWhj37TV2N2+FA3fTBnqVEhagROhOihDzzqs5HUO1nOsm\nwSg+E5YcIY75PEadJE3cfak6goj0ulbg733TTTibxRa4jSwbv3S8zkfimLa/\nAtvl\r\n=Ob8s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs0XipLF0vhAaGG6UvPZ+koIJmro/6/KmrJprOK7vHSgIhAMwAqIV52hX+dFOrqQjuLI8BTX+jX+D9f0dwmiOoKrQZ"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.5_1582749359308_0.3808966893622634"},"_hasShrinkwrap":false},"6.3.6-test.1583839547381":{"name":"ts-toolbelt","version":"6.3.6-test.1583839547381","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4f2f2d61b9181bcf10c46dc06ae5184050127427","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.6-test.1583839547381","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-EQrhA/4tGXvS0SRNLBEtphwdLlMAYFBWg84GdIiK2duBwGC7A5wl+I9sPeyfx5WEL4u9n6AfWU2m2f4T7wbFDw==","shasum":"9d1d9becc56a3e9c187988296e821bbad4ef2559","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.6-test.1583839547381.tgz","fileCount":6,"unpackedSize":358352,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZ3lNCRA9TVsSAnZWagAAPAwP/iP9JhmyhaErEzSOL2Of\nOwy9OWCGk/tthI52A6cM6HEUbCbyUn2aZSI6Xr8VdsEo0htB0W+nt3uIQn1x\n1zwOlthUdPK23s7EIucQPqZCawqEkrXL7647m6M1nSrIMrn9qfz4Nq1jwAiJ\noZW7HRODqeKv/EihXdfHmfwWQzkg7F+pSOOsMpUu503mOtrmS16UPiicGlXV\n+BzAYAhzzFVdjT5HxwMWhbnPyRgQ+ZoN7byjCZVBY6511CA33IS2Vq0hCnjk\n2HDa2E81yNGiUmUqgIA4XsvFsXe43vWOXLVzt6kCNicvz7lwZ0/JTva9SYiF\nvymqCphmRsKWxNH8wSj3ChQ0PR7haOXL1O/qAo45WScyo9VeSWQwfGacinTR\n7T/7VruJiv30vlsWMlP775LxrerT04dSP8QrBfY4Sh5zocphahYxdX3/ghci\nct++rSl1+CDrjRxgZslM9WKlH3/eEZbuVgIVjiG622brL0P1Rhj18lv2yPO/\nP3CzZ86mY6o0aZrX6U2DBvsSiJ0is5/jfMvsplC26kpVeS6XJ0WLyUm0RbvG\nTOg86tk1qGXj4e+2oxIfQ2o0YsomYqD7Ukki5/MmIBCvWv5u5tzBeYWrkFKt\ncoboM4yjn9OHWC4YhWnUEauz+8emdXNIHntqgi8Np4CXFbbvU7MdnSsDy1Uh\nCgzv\r\n=lVRa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHLwvAjXw7XJVBPzZmjXj8Jcek1hsh9+tRTQjCX7MytWAiAk3PqNBimNyIsTilbg5jA1/aLwiOVKOgtO2aFayI1mdQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.6-test.1583839547381_1583839564621_0.6394758373098866"},"_hasShrinkwrap":false},"6.3.6-test.1583854713634":{"name":"ts-toolbelt","version":"6.3.6-test.1583854713634","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4f2f2d61b9181bcf10c46dc06ae5184050127427","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.6-test.1583854713634","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/xvQWeJVgEgfsUDdHceca42HIVmUtAsGFOs3pj/4iHQQucIhhwhbfKflBF4iNJdyeqwMNBOi21PB/V7u24KnLg==","shasum":"35a28dfee83f8767ae6d1dfa17e99e054c7ea6fc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.6-test.1583854713634.tgz","fileCount":6,"unpackedSize":358352,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZ7SKCRA9TVsSAnZWagAAkscQAIwabDIq0gC+S8rQetwA\nkyFmhK7ltTn1iOkVnds1l9vY+w0VqLh6VrihApSMKBqCpgdZbMR5OkkzVJPt\nbiH9ccHKgkoayU+gZmWlFwJyFot+7yEA90d7QP9kJ9WojL+ICWW1SuHoy2Jf\n/vwi0G4Fs5kLlEz+WyUmGHVBoMX4E24W5g3PXnw7pWdCDWyneUO7xIPpmyeq\naT1ZVbru0eh9ni5PssPdUiRz/vCGdWSVhAE4O+ht6jlZDUByqmSiQiNOodch\nfD/BtdINSONs89G3vRZdoKxOxU0Y4MdyxxRvmeOkIMuLiUoeogEIcEU8n7ii\nWGEDTwraI9i+oho3BbmJtbj5ATenxFiyAlqIgaa0bstm7Rj+aGZNaSHTnHoW\nYsrnFaudtOo/6Qn7PGb0bWjbOWORE3hKuJbZPe9zrGQyupdDV2quIcbx8zsb\nHQH4CDmLJAtI+h4/JcNpunWZ97jneeuW4MR5j1AEesNj/BkInM5SXKMLchM0\nm55f94xO9hMdtC8MsqBThcdho83GoyhOomYoJg2Z0c2KrR64aXf/cEEKjD4V\nOHb61RWk+/5+BkOxckL1hUQqJsugc1IWe6fSWTVIlDKyn7lTJhBSfLFX7FFz\nNc9AgHeUc+mrTPd0Oerl/viArHh2VEWbgTStySNQaFuRRzpj5uRUmvustUEm\njuXZ\r\n=qghX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIa/8f2yEJRplRfd+zVMmkJK/wsvZYN07gcu4p8vA03AIhAIVAjSItT3WiBtpYdunLZR1PXDrV7OHWiHWYkvkfddeT"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.6-test.1583854713634_1583854729586_0.00811457838550278"},"_hasShrinkwrap":false},"6.3.6-test.1583877557990":{"name":"ts-toolbelt","version":"6.3.6-test.1583877557990","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4f2f2d61b9181bcf10c46dc06ae5184050127427","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.6-test.1583877557990","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-VbchpGNBvTWQ+M0P2RqoH5OdlDaJW7sh0BCsdputVaw0xF7vhNhbmtYQwnMNE+pUosR6JsUhK/psIpn27Zb3bw==","shasum":"68a2574b9492e44df63c44f8a9512a1026239f2b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.6-test.1583877557990.tgz","fileCount":6,"unpackedSize":358352,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaA3ICRA9TVsSAnZWagAA2PcP/2hbeCjmd0bOWsYvkwVh\nOeanisxUGm5EIUsz4ylgm6H8hklTPEXXrRG5ANMRoivqW3nTJoJngUpL/Iow\n5VusESPXSUiV+lDU3KRpbaZ/WEJi7E3yT0YPanu6FCcCbpSrznPVyKmNGhdn\ncqRRTXupjIDue+Pu0oZHUjfWNJu/5PNjB4a5Ox9Lv0hPnj0Q/MhZGIg0Fhbf\nRrsAuoB7sedRdPaiMCxcmFUt6xAV2CJLxqyvU8MuuBScTfoS0WoAsIf0zZbk\nCNjjn9sQGS76Gtn5yl/bGS+rv9RqrTQSN3mEztltF9llmhQy6WnMCQ38tWYs\nZL0D7pIT/c0qIZdKKORT/hbQEXAdXXGCpzqM2u0CkUavmLwvrTcpx+f1pkBc\nX32ghofCmOSc7hlf/vtN9x8KnPDHLT2z+IlOKqCiGudsve4EqoyVJsF9+LIe\nbK5zAgPLOLxpyJLHlYvmksbd9+LeULoCaC5opMPNoq2fatf1Cj2KqRZVVqDL\nNirewu6IMyO4LEic8kSHbKM+FaADgyK9w+ZcwPEAlsYzjW69X81GAtQU4la6\njw9fhTs+I7qEUTPgU5Qv3h95UbZ5U3JPzzTKojE/uwyPInHMu7BlBsxi5XTf\nRXOiAX3xntUE9EI8YcDuOqnpWK7DrJUfVst4tLriyyTN4n4k74Ckshk/U+19\nNAuo\r\n=0xR+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID17eNzO0g5YvUkYwizhkLib0Tky07He+ZEyJRW482chAiEA5LBvtj6e8DF72BblN0pCUDEcI08SgI3qCI4Y72qQtAI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.6-test.1583877557990_1583877575929_0.8210482791973304"},"_hasShrinkwrap":false},"6.3.6":{"name":"ts-toolbelt","version":"6.3.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"4f2f2d61b9181bcf10c46dc06ae5184050127427","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-eVzym+LyQodOCfyVyQDQ6FGYbO2Xf9Nc4dGLRKlKSUpAs+8qQWHG+grDiA3ciEuNPNZ0qJnNIYkdqBW1rCWuUA==","shasum":"2bde29106c013ed520c32f30e1248daf8fd4f5f9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.6.tgz","fileCount":6,"unpackedSize":358333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaA6nCRA9TVsSAnZWagAAePYP/RvVN+MwqqodrnzoM06c\nnKj/zebkpNOZppxiB85Vx61+4DvWNJscJrjNvWgOWmtKiMaiqCanynx4Eqpw\nfZ2uEV9jMdFZglSbiqlVT16IcC9q9I8Q8WsByIYhW5N7AwepWp51iWC1lgAV\nnsSFSRDq+4hkOlYJZaMemDI7WRxNP3aDyEkBmOQg/X0ft8Lc8S48dve1vNXw\nKAgJRy5snsYBu/euEnKRrArw7NLLABXkcYgzYXSab9kT2GkNUkL3OYxUMK2Q\nm38mmfQyE4b9QJ4yRzVINW8/7CPhCpX6swvDJfLlgHs7ydEwLaaNYUY12rqA\nrq6te/sNIqbVquWeGcNsNEEeSqpKfVio5lzkp6OJk9WbGWLAmQfR4EuK0QFc\nsog43/keRaUmPZ4/iAIcpV7zN7Ij+PSip5uSBe8COeLSGNEUyUIUA565Q/B4\nmvNzjq2PZKzx5aMN/b1TVycGF47F/RZBr9Ucc+NLsRDlnh5q6zkqV+/e96ca\nuvjrUgsLX5XoBzPXs47dRcxj0mQJzf+8hCGNvoCXPc9X+h09n6y1uF/mnHrI\nHWCmcbjE07SaSGPWk66ttIi6JJARGvmxC02s7K941WWC1VvPVjz9JURVtxZk\nE5jT+x4eH5oYffmeCSwYisNG2xgA2VU3kcK7Mk6ih3k9zd+9PHN7BJBTj/Wg\n5ggS\r\n=hf1w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICDeiJX8X9KX7qpI9IFAegj8j6wGLIsOMwUR9BfMEnajAiAgiJexFA/irwasLKDeswGTRQapjdJT2ZyptpgH/qKvFQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.6_1583877799355_0.32936217278293456"},"_hasShrinkwrap":false},"6.3.8-test.1585742261800":{"name":"ts-toolbelt","version":"6.3.8-test.1585742261800","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"51cf4d63b59aeaeb619cc8eead27be4d3b0fa396","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">Get the most out of TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.8-test.1585742261800","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-KTZz1Zo/sVooIxcNvW3nGqVxFssKRhOI0khGSCatmr8rtlp2iZZipEMC5xFFOBTNusUUa3oSjfyNboxvMIvpcQ==","shasum":"69a2ab3f43503ad396207f4a35eee839d339c65d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.8-test.1585742261800.tgz","fileCount":6,"unpackedSize":359250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehIHNCRA9TVsSAnZWagAAosEQAIyFQEmdmfQKPeo/AjBy\nhTPP5I8GgwXyiu18ztv6qDXDks5foCyGbMskmdV8AD/OS1c2uecAhV5asurE\nhT77/ZOqWaMNmkvL08E24cfs4VYW0NwnNViR3Bk1d1QtsTZoJgu5J13lR6Rg\naNAZrn1SWevn7bhISrOVIBZXDjqcupgOFiRdcNFS3q/JhmrfQaSLmLk8KLoL\nC1DNUW+rLMslB2HB21Q0uS13C9nUoNNzxSej14poS6IMEk+xeENKL2WDNkV/\nzA8hQqOKluQvlSoRaOBjwXAL4WoLJ/rPmYTgf6OLW8lngw6XuiegFxZOPwE+\n2Ov4iekA2GwrQr3DhF104IzrnG9a70wZX/XmWio2y6I3oeWNnqzL9NwvPs3d\nx1SDOgrszX8hn5HVNXCojF/yjGagOJ6dsZ/Jgcu7SQpSpv2Np75jGx7FsHbu\nDZn0B1cI4GAbGH7knHlM9cWRnZCetrovyhbSHTpK0U6JvLUmUwrn93BvdP75\nO5gBBrHL3RjK0tDkhDXHN26i5i8jPfbbw6/Etlkm7ZpVXe5qhmgqwb+RwV6E\nkczEaJo5gfZX1uGihaUu+0jQlYK46XdK7ikW9HmClVLEi43u6HdpRSAVmfDH\neufcqFfffAwvTleEofDegw1sQLkdVAfDN0/1ZjmSZeHcG25KPRuNEDG3O4H+\nYaUx\r\n=zkdm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElnE+ABrVOtLVPIuzKfgfoNxyBvSSipHB5kKmIWK6sLAiEApGRDkhuBL5rcCiEA93h6BfMaRrdjDK2CjKITFY1yNig="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.8-test.1585742261800_1585742285320_0.24566366232714487"},"_hasShrinkwrap":false},"6.3.8":{"name":"ts-toolbelt","version":"6.3.8","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"51cf4d63b59aeaeb619cc8eead27be4d3b0fa396","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.8","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-tBtd5wBLsYfrm08nyF+GC8Id2QilKJPE36r1HZ82CsHNlnv/SPyzOtZbCu9DGIgHiKdiVuIJ8L3d0XbhYey4JA==","shasum":"6f845a687827d230d4c694289786f00cdc5b7046","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.8.tgz","fileCount":6,"unpackedSize":359231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehIMSCRA9TVsSAnZWagAAiE4P/0aOvOTMraQZo5ehwIcs\n48z7wwK+CVrbYRlVlE/DoMk5dvcEWtpa7j+dMvB+Bcsh1VLDaYm2sJx0Y04K\nke7HxhL8i+6zMWaPg+WV7BJxPvZW7Q5FFfSDY6ltiqM+WaOuV+KXn8NYgajk\no+UAf+qLBMy799mTIZ4LBdzzkH8/yJLWezPAI3JB9RRYqGZRIiFPiINSIstj\n615dfte+PoR23FFhpb4LIPbjyvfXXMphtNWGPjYV0cmFWLndN6IrAinVKz5G\nSJqU7OdwpTTcjwSKjDMGZcuJFMfcCveIfAAkAUiV9qvs+sq7KXEbIIiGNk8p\nrJUKijUPwjyAl8VTskbTRuCsGJqlS6aGa7al5GqGDo/GQ3Dwq5pGoAkgPIX/\nNrB6XtY6usL8BXAYCWHdsOuNgFn1wN4ePr8qQ/qVTOqM6qpp5BsS7CzMtxXw\nj9jqsR6SGXL6JFBwNGFcC9dK6a0NbzGG59XYRxfbnQhWDPewGlnWjtBiZBul\nrQc9t3WbPWR/mhwyzrXbNkaKY+PE88dBsN53iaGGc+c3FzG+T7eEjI2jcEPs\n7bJYDy+ly1joi8Vfkc7nbMBOaCVK9TsO4S4RAofAqXFiIuV7gWQcNbAp8yNz\n28qfOi2Hha8+O1MJhJFAMvzrOMej4D9QApeHRHLE3VC7Sl9bSebUBwMY4I6N\n5+gC\r\n=QkMM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1Z3AlGHMKNnQMsD5Rgb7qRIKJrQjJkxX1ocApiBjFuwIhALv5Qz4e6Ep3FwPMkDLWQ81Lv0Jyl0yZU8zu22EdeEoU"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.8_1585742610179_0.9885236266826267"},"_hasShrinkwrap":false},"6.3.9-test.1585766805439":{"name":"ts-toolbelt","version":"6.3.9-test.1585766805439","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"f08b76e2f9a193d36532ea7a6da894988ac9420d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.9-test.1585766805439","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-eT/IgBn4Ey1ihMwahMpGOggdrFUrl066mLlikZNuO/tvUGtR6P8mkG1vg2l+Lb0eyd6mEfnuz72tFIknR2cSyA==","shasum":"a574550407e098e572eb05b37b2126196b4c36d3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.9-test.1585766805439.tgz","fileCount":6,"unpackedSize":359404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehOGuCRA9TVsSAnZWagAAbKEP/jxYrNrz9HVZQU2GTsEN\nNJt/I49cZksw7540in1dGSTzjnyQX2zwV1x36OcrKKYvliJdF1C3kmP4P4yW\nkX91Nm+sEp22/v8pc2wJvpawlTHh3Rtms/BsDn6+zAZ0q8dn90662akbdgBo\nDlA2yf6HKp5mjILCocdQGdZsxj8C9YY7pAYE/36bM+cHIAj9vMNAmWzNqwyW\nrRmE8CFAX75oMeBRujZH9wMZfgx2hB4WRs4vPPKF02ikYLI/J3aS+bkgYMfz\nBzpseOUqC/RXBHPyDmwPipEUFIxNnKb0o4VrsgqzYUADl3A3p+mDcEu4MgBW\nmdV0rdN/+9Ty2Tm7EV6j/85JmHnQpqYEaDcqw1u+oy0SAphQH5oCGEGoeXEk\nRiK8mdGdF3bw6aJpa2XG6OsdeLUPlf+8fsVs9Ew46daKC7t/ofWKKW3tY8pp\nFJaC3V2PDsUKaek6ltTIopLtWOBVg+C/PAPM2J4Lxmh5dNPnG6Pf5PPqYgbE\n+M6QbI6urZUJNsblt8mP7tcmgvECW/e1EdMlFoWr+603QYAqj29TU/U9l6Y3\n4kwj4LHEbztEEcXeAj3CxJZrDT8eI+Ygg5LM5SSl3Ozr1Q4GoqPd604HQdzo\nhJbY3UEXTHIy1xohm9cDlDb6qzGXO8Qb2aRoBznCUZP0i0TVX+n8z4y+T2bG\n+7VF\r\n=2Gb8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChy+mA94xN5SE+8SQNAvNu8ATbMmsWOBXG4o7yljrgDgIhAPqzDOiMIRF1Ryy0f3af7Y9NaTSmWUGysnE2iG05F60a"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.9-test.1585766805439_1585766829309_0.6001007458594909"},"_hasShrinkwrap":false},"6.3.9":{"name":"ts-toolbelt","version":"6.3.9","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"f08b76e2f9a193d36532ea7a6da894988ac9420d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.9","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-nFT5av4YNp6A9pqn8LaDez59JOH17hJB/+I3/1ilJCzca2R58Tg+gLIEc+ADLAHoW9UJGMEFQa0gq8uekfvNfQ==","shasum":"eb629caf582b0f1f6cbe4515869fc3e79d46058b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.9.tgz","fileCount":6,"unpackedSize":359385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehOL+CRA9TVsSAnZWagAAJmEP/18Z4S9xTs7Rvy1gWIoR\nLuvz6NHgFn1fa6Iwl3ZuIM4aT/hqqSkcxcUH9GnKICNpVSAOsuH2QPKNg5eE\n5kM2C6guufR/vTCWYobnTG/jxqsNjupaAhZNKiKMLiqPYR7yYJdFqATOeAVo\nwyQu8YiuDouWaEmpGm7QsFBw9aQuy/MdOT9NgnDtM0XGlJTQkwZsfAVuCLfS\nPYUM2xCAg5n9zMOym39VXXntFGbm+QdXHYfW4UAHIzRKp9ysY5tRZF2nmO7M\nzXuaUyp3J6k5UORgY2T9O5iOJ9XpniOoVkv/VkJcTq5MvyS3AIiAqXdufbOt\nJNSaJVuRufUeCIJglPuqgwMteKtUSbgzLjU3Ert1cHxlKAuXuN1m9YoayXH6\nt6gzh9ysjuAQp57la5RlXp+/zw9oy41JZXiUvoThtlB5s0zCFDLUrocAlev3\nJnsqw7qHVqBc7rZDwlwf2/psz7lv1w2dXdTEzygf5Ik4/AriL3gDZkB8jFvY\nfTM48AoBuTCCwQC9j2C9WbWMhZ35hFQVvfMf2ji45j4dNp3tp7MUbigxt7wR\nf9xwqRb+bL4ynqMspmeigTucKy9nId3UXUNA0hLjy0uFhGn9SF5h8fG/UK5k\ncnaEh4ZCUbLGubJWZ320KxVGZ97TpJ6kHyjsC3d9NY0UE/YRr6byhX5qEvkK\nTok6\r\n=JzKS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWVpXqGeKV75r9PrpD1m+ZgErocdEexuOO7s1uLtF+vgIhANBCGeeRJxsoBZopBr3A1GeTJH1B+9fcS2ArNEb15Rbe"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.9_1585767165924_0.09873434297195915"},"_hasShrinkwrap":false},"6.3.10-test.1585824075674":{"name":"ts-toolbelt","version":"6.3.10-test.1585824075674","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"0a4e966f6f36dbcec4998cfd792545e7c974fd4e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8)\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** how to choose categories? match your type with the above categories\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, N, O, S, L, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n* Need to write the examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.10-test.1585824075674","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-xk7mkI7PFmXXT0Gsa2XGZp099Y5fCE6QQyBUQu2iXXqVzBL+IcRL37Tsde7OUrAl3qkSq1cJkQjmQTNAsNMbrw==","shasum":"2735031a88692924541f2083237620b6b16ab865","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.10-test.1585824075674.tgz","fileCount":6,"unpackedSize":361465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehcFjCRA9TVsSAnZWagAAxD0QAJsjUxzOWYsPDW34bvKY\nX89zDAYkXX3v6vFnBs20LfZaW5N0WVSXJpCy18WoqDbIUL0l+s7q6I9s1Cbu\nAPW5lYW1T6NZ4JthvPPEZpgZTrehBAd8iLfIf47IDnrBfyZGOt9vA2Fl335O\nZwFYmBi4k3uAR4zXKF91EgoClbEd9ZosPjTqu2FS48ZWJ9orXD8yfZ79WxX+\nYkYSN8CwMXDZ7cznMwlojovnWD8nSifRflOhV0VKLC35NjGopATP4DmB0dvP\nlaFeu/1vafithpJ2conNCX6o86rA0pCcGQsl89tRFsUDWhtHj4ns3zv5SySN\nS/Eq9sCuv9I0d5hZnYg0xqh9MMwji18A2Ldems9DecH0hrDEIIVy1BxcDxGz\nUTsuWYOx6eg3rmX0Nqm4NNKSe/w30ppkY/uTzBLSi+893t7nwOlAzK/mRiI0\nZE3osOVOupU9pfVfSrrFJEGrxmVKZa7vT8Lz9JJKaUgrYTtBh7GzZNzMxLCa\nqgK93e9DasB8f3NTMw6PKe5RZIWYbuYhrvDflpdaDkAs8iHHb72YpgxmRUnZ\n27rgUb5mcZBWjZsWGT5p86xFfM6ciOzvDf1Hlf5iJKrnp7VbMwdIpDzYB638\nPilD3e8hMnrZ5raF/NqXi2P6eBm/BHzKV2rCYStxv2d8MAHxWOAZ8hxsewXH\nV8HE\r\n=Qr1K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK63Ti0z2InlwQg6XowC+djooGfGETPlPjf/TmqD8ggQIhAJ4pY1CGO9T4YEbCrhdwhWYzalVaHiPjMsQvc02AfJYE"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.10-test.1585824075674_1585824099208_0.955520834676219"},"_hasShrinkwrap":false},"6.3.10":{"name":"ts-toolbelt","version":"6.3.10","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"0a4e966f6f36dbcec4998cfd792545e7c974fd4e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.10","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-aGI+vx0NlSI2llqK5ZLQoaeX+j3Nd7cRXVZ341U5Hg8Wa/unHsOeWV/zeSGWnmfnR/T4hQNu9arHO0ldYjmJgg==","shasum":"6e8b3db18fa986f053eb338203006e3cc672b098","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.10.tgz","fileCount":6,"unpackedSize":361446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehcLECRA9TVsSAnZWagAA5osP/ieKqSItIH72v1JC5FeU\nJBsWrvr5whHTsf8K9zv3QZf8QmgGYT3LxtRyqGUtegv+dArTMTiXp/QxJXX7\ny4fXkU7OKz3fJ0FtkN1SS0OQ9ekedLo2ngzQBxuTN3fCAxp/2dYSpFfbyRdz\nU6W7NTExG36yPVgPMsLRYuRCQ2BOy+gr1TkzICuqBkISrros5d/+yIsOnVOu\nIBNQDzuxXN1ro5kquKIYRZUdqzURnZN7gul8hlrguCvnglL9iZ8hnI6DZZr8\n6WgYKCOUsKFfglU8ezMj+3xpx5d+E37ICnuKgTJKxrYPb77dQokgdC4L+VL4\nqU3Agodqb3lD7SoU1f0SJ3RCkj+TeGR1LzHCCMyQ77EZIq3802j19YFml9dX\n36N8HRWDuyqr8qT21MSK0SDAng6iyxasoTrpDYBGtC0DztKU/fq0fBsAPyqx\naG/OMDmEkOTe3y4vcPPG8FRfd2zaUEP9ySRpC5oM+e5Gbm4mMsam8ZcokXU/\nK84rMZ+A3niMxsc6HkEfb4xZx49XC44AcBuF3FtUApERgLFCqXVxRuqWkyo8\ncwq7EkV7FbHYZRQ/u6EIu86LNWMDEA4TCs0LjetjWjCCLhyKL1pEyndWWHJx\nS1bp+O855Xbdx/CnDMu17ZiVjAtjgsrIPBRTlcXR9bcr8VebrsViWWLE96Xv\nkyny\r\n=ay9U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC1E05V2mg+y0WCsLUOqJLktvcJhG6TxzzWa7urnnTyFAiB1JOyCgYFQJuluTkbI0QeYwxcRo34iFFyP7kXC1/Q8Aw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.10_1585824452003_0.2473238226483534"},"_hasShrinkwrap":false},"6.3.11-test.1585824894102":{"name":"ts-toolbelt","version":"6.3.11-test.1585824894102","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b26c9e56909aae04f64c0e2b4636f7adab52c24d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.11-test.1585824894102","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-jSQsLcZ3tcFy0VSVp4WApTTodEGRpNkqfp4xEzg484H9hQZFCTHAGv98+QlGeT6p1js6aBduWCq1HhGxmRN5Lg==","shasum":"09a8679b15e9f8eedfeab6e0d86fa7319bfd172a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.11-test.1585824894102.tgz","fileCount":6,"unpackedSize":362029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehcSVCRA9TVsSAnZWagAAiP4P+waAqHXaSbG4rVLFmCOB\nk9jASB2VW0j80HUxJ5TgwvBAOnHm/visxPZOlG0Mqg8d4DcKcKnZeHUAxnHc\nO4itVUUZgOOFyd2ebYKWvBb1JPe/wIpII+PExvPKrQMx2ov3YYhcNAuoIeLx\nvVVsuuVL+tIdLxfxzRGtlXNZA43GGmiAcHraSLZgr2lfDYEO34TovQx/0YD5\ni/5zRcvsuNrK6fzHxzaLY1CDFh1WGm9WIfbtlMr4a6dZq1Huf/nfxU5k4Uk8\nFLNvS6io+dMjwfTSj07j/3UBF1xPndnCmok3isOAu/eUCbg9liXzyqa96GXx\n6cTafpXM8eSGiu+sXf8vL5b9z7b82xa5uZgqGDlcs/UhOS6LzbLdTyBEbur+\nvFpHvEUuN5hEkuJjkwAKA8HEW4fwh6qM6VlFHhnYIrs55ANQ0tVwob4MxIkZ\nLTNUrtVujZuiW223kJ0XPMJ5ISxjrgR+X75WWFn9m3Sa6YYHRKDj2vyBeYLv\nZbwepULVKX+rBhgH0XO94CJc6D2i+I/sO4Q8qf3AwKB16ILhNrylQTX2HJVj\nvX5GZOQQ90v7+ms/D9NgRonAc4hvQIIhfFD4Dt2iYVvxEQVHJQhJu/3NGB4O\numDfoI2PKthRn16SLAGy2JjDq1u7UXxZrX2J80tO7SP0EBEAeQKxGqHq5BUY\nWTv2\r\n=RsqT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0zZexjHLIH6ubOis+I64nOOgairQYwn2U7I3slU7JYAIhAIUXDXj2UzE3eMoDr7OreG56FOvAQPVsA/RX167/sqd6"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.11-test.1585824894102_1585824917535_0.2775043234466741"},"_hasShrinkwrap":false},"6.3.11":{"name":"ts-toolbelt","version":"6.3.11","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b26c9e56909aae04f64c0e2b4636f7adab52c24d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.11","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-J9Cz5wLPay4OEkiDR6BEy4hh112Jhq2AMCbmtHqw9Ch1Y+Go5bwl+CTCmF7xUN4a/67ikd0gNW70u4hEOgacsA==","shasum":"c1669a33f2ebbd941dd1942054d1017984562320","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.11.tgz","fileCount":6,"unpackedSize":362010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehcXfCRA9TVsSAnZWagAASXEQAJpUPfL6/E2AM5TT3Qs/\nzpwoO2t6JGo6Bpa/7SEpriy9akKGFNv4VhhRMDGRrj79SacLRnWjfVk3s8cw\n8WoDKc33vNQ5faEEHvjDX98yPZ/dm41+vY5Cfa/ke/m4XphsqaiFUrg4U5X4\nUgedHTKLBi5UrY+P+fIvkQg2H1igpblTFKDRyf/QN8vY5l8jwuoDLaJKLJRY\n9lxxVAuX5smnVRDQ96GfB7pJKI33la6fVxG5QyXfSjoJYuUDt0QjhdL44FA4\n76AXVVuAVTaXIy847zH3P1mq6YzOL0bo4Vg0dAuNMje4hIGvjCDvnUYcKU4S\nA2JME1MBaDv27Hhxjj8K5naQMxk/OfM0ltmNOrDvNabGdW0MWITXXbaYKfRS\nRNgHzujT/aef/UYi5zWitrY8fPK4kHnfybpPJtZOKWExjK+MYRfKQARHYMfR\nSRPcNRPcJsPhnUo0/jWHiXJbZQJmDTo1xLzcyJBFzwTd2GK775kOir65RWUf\nfhj2vxw66ZfllDDUed09rMvAK/k99pO9S01sYzYp1zPlcZPLAyVfiXYTvOei\n7ZwTTH+V/8I0hwKeyMgl+p0zsY2Yt8W07WCgokdOzhL8HfWCiJIUz2aILky4\n4ggqGTu7IiFPAhfO3udJnTk4cZH2crzSKju3Hg3rGLNq4nSP86DwNcIAXFn/\nSmFS\r\n=oFPG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiooFbyj8g8sy+0n58+TOvwXsA2qvYf/e9MYgytK7dwwIgf1q845gT7lQRF5R1edUST1XxUXH90BZwTc80Nno0maY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.11_1585825246492_0.29413170899385443"},"_hasShrinkwrap":false},"6.3.12-test.1586033044563":{"name":"ts-toolbelt","version":"6.3.12-test.1586033044563","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"57090285b72b43eb61a5925b4a4a69617b3f3de2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.12-test.1586033044563","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ORxi1w9xUSFfYqQNHS1+6CK0Bl/fnPCXSZN2gKpgHtL9WoKbSBrChT2aIeI9zb0pkLkOs6pc78vpwx5hFjTyYA==","shasum":"2351f15c697435e463884f6f9875638e91bc7e96","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.12-test.1586033044563.tgz","fileCount":6,"unpackedSize":362290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeiPGsCRA9TVsSAnZWagAAyrMQAJ9LRZ//MNVNTvvobViD\nK0hNAwu/Y6fLynxeYFzovOwxSO5k58Vw/pnKhz2f4eV6sR4cj1phNEISD0lZ\nNlyce0XYbEjwR37Pb3MVbc1HvLvmaHT/IlTtu01NlD+0c7hU+8H/qUyxGCEu\nBGvjMs718HtVvJvqqmFi+yfKGdq3TB2s5U2xGt+bFejnQbQH90ipGRYTyZay\nmcA8KGvd4jiqSusdb+PlUZ9Lzn6+g0sCYsCiEC0yw+8RdlRPLiMHhWa9CBiA\nXkCNz5V5B1jaVcM3l6po3/5wmVg2H8Yi+Nx/IWxL6PGsapo0roZRWN+R7chL\nrbjGCbpbrHgEVDMZqHlVghBqtoUaoc4/x3yLH2VVSn1aFvHLKMpJZAOy4aVS\n8HTAHIDxywmnjdynuOQoO87rUTiDPN0TJVjcqUSI3TsLfpNfzDAiNUaqsveU\nKZfb/dJCT6t9xXwiB1Nmkh7SDOoUZmNdxJggQCQbVPgv4IG+z2qxrISlKKUE\nvEZcbGpXEt8MU9oe7CA6c2GYZtLti0McKpv1fyMDnROVRRQT/cz0GHErt+gD\nN4tJ16tDRFDmJunJp0+lh7KSXg0rzCPQC6yy/ymur1AeLnhqpTqmn+r2elwv\nbspngki8RsKMGwv++ozhYEiKYjzUUnxtPLE3KNM+5W7xh6ZaZG4I18PMVcbl\nOis1\r\n=Tvho\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqBJjdpkX18pChTt7stPhz0I39l4y4yWsYg97x26HhRAiEAvRQZ/6nDz9+OKu5PgvdeGRddgY3it4W52Xr+nVwHZXQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.12-test.1586033044563_1586033068042_0.49324979976746364"},"_hasShrinkwrap":false},"6.3.12":{"name":"ts-toolbelt","version":"6.3.12","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"57090285b72b43eb61a5925b4a4a69617b3f3de2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.12","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-hxX5rMtZRLGdRrz0LpEJO37K/SiSBoT/P1xx3WW1vON3P8FMqsCHIxrbynyWlEWHQOsLENwKV9AfEBTBNcv4eg==","shasum":"2a9eb22759ef65d2ee3e01544f68059ea80917bf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.12.tgz","fileCount":6,"unpackedSize":362271,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeiPLuCRA9TVsSAnZWagAAkJ4P/A7ctCTFQKT92SaRYZcy\nuJFh25rk0jIn0MXGS9Pmbi0VapSDCQ8eMoXcDth+6D6RTFPTZ860diq0D7Bf\ngxqaFGg4Njox9fy/GhtYoUK2ZDOCkS32vXcbQym6lvs2UrZOqHPfUF6v1z09\nIfzeWQr78+FMLT9gAlsu79BnrCiSp5r8vnMSiyafHuFINXqvVGkWSbcwrUZq\nQ/bWZRzgktZwdIgbi3ZQbH1ZFgaG29jbIKyZ53twwZCIcvRS7JwSl5cpAj+P\n+sfTDiu8wa+RhGxv1pT+lW6lFRQw+XkduLdxb5Lqd+vvJosXaF3Bd7Ugxoy7\n2kgCd/55eZy+88+uQJZLWOE7uhT3EB+K6mR0tRUwX6VVmT8Iy/s+5nt5NVVR\nld7yyaVeWRVDc+i7Ix9DJBsC0Jq+QuyOPk1K8g8oiXGcjcFWWhLCoPzduW8k\nfHOtzQiWWtgAZOfxD2abxyyqN8PyX/2BB1S8LzJOnptaT0lX+dGAYyySXpjM\nPa0fEp0IEAgxhDNP0r50AvZX82fYGsa2DzmZHR14gMzbCjzHkOkK/2AjVh+I\nwbT+dlyT84/De7xeD4pvpb8BCSMpueXz8XtMwp1GTXol8dogkbi9x6QfzRAP\ne8rMIiKKp3Q6ixhnTC9FyqXZ3HCp3D2jUxB3jguw/D1bDaopMr4dVggQZPr0\nFXW9\r\n=UnY1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZemW3QhOQ1kmNIGOxV30a9BqMtDMIL5M5Cn89m+WypAiEA/mkQGvQ5OLbKa3nMuPwa1uK9seaW8Q3oQlXhjUN2YlI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.12_1586033390331_0.9040407864114963"},"_hasShrinkwrap":false},"6.3.13-test.1586511456255":{"name":"ts-toolbelt","version":"6.3.13-test.1586511456255","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"1b05e95163a41db3ed74a4fa8597e567cf8b7f2e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.13-test.1586511456255","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-pNo7UpoXzUF+t6B4Wd6Q19+MarKuSyLa0NsSeNoyDICQjUZUcsKWONH3wszGfS4L8EXrSgo8TVzUq7UQPf3XTg==","shasum":"26de012a263086b40afed99063432570a3133011","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.13-test.1586511456255.tgz","fileCount":6,"unpackedSize":362610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekD54CRA9TVsSAnZWagAAJVoP/1CDgcG4EpvTC7b2RXEJ\n0IW27MO9Wvi4DcBcKXWcnnCL+9t0dPfntXYNDRU4fjMNDLfms02zfyiP6pjR\nj0IBJg/EH+C4NMXaUkov0w7/giJ9GDkEdfbWV7oQhRQm66t4f/4/Hs4orccS\nu+EmzOO3bi/5Ns69Yxz8Edf6rU1NqjryNe/8QCKSHFF2XHzNjFBUPzwAZU8/\nOnrR3owZyUkWIwEmH0sGeiFaQdwBXeG82U8gnghYTLTgyiC2gz0djIZ5uskL\nkBoe3NIcGso5lRTFMMzMmduH4bA+4d7TEyWZmSWIKFEEZxKYNKqb1IRuIG2A\nmGMb1+XzMQiuyVd4WG97KTNzHV/gQ7YFeQfPTezVsWmIbHkXEOSpqgkd0tvs\nEWO9QNdyEt/kLixuP+492/wJ0bu7NQ1bKfbkirSeSEamrEU440DpTJPl8sZL\nnj4BnwPPtAbbR5oP3m4mdbD7RMbznrTvNeBGt8Lh+a8UgklxEHM9zbs/HkP+\nKOh+/JtHSAxJ/dVayz9OjWkaPbp0vDza+PWujr2Fn+VCVezshNAB45gvajIa\nf/1aLMyWmzGYzXi+paL17xfgdoc7K/jauuY5OK5McmqLLUjYGadOO0rNASfI\nFlQYjiaQEm3mjHhkw4hNwHRsBp9eiTx/KODmCSiLg+pOodlanBRUOqI07KRC\nz3Dc\r\n=N5m1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcBQ/7r3CKZKAPbix68i/QB09/toyOiYuIgoS1LNN/pAiA3YkqR5Me+/O9Log0YYfHVZQBYV2s4r1W5E61yvNvqhQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.13-test.1586511456255_1586511479370_0.5950207849711784"},"_hasShrinkwrap":false},"6.3.13":{"name":"ts-toolbelt","version":"6.3.13","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"1b05e95163a41db3ed74a4fa8597e567cf8b7f2e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.3.13","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wC3SxZTo4bPsVaNOcg4GGI1t9kIvlDUE6qkdV5r1Mq2E046hX/EdS6m+l2MCzDy8qHALIZDmMRZcti6WKlLIhA==","shasum":"6e5bded5d064004a187abe9006dca69100517a01","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.3.13.tgz","fileCount":6,"unpackedSize":362591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekD+8CRA9TVsSAnZWagAAjB8P/3IgUdtkVzx+mLt9ZH5L\n/QEqfo73xtq1fS9IWdQQ7wG/Qdl3f2eE3XBb2HBi2rP5nJlekpcnV1pjQMZ1\nbtmdHwHk9x0VE3A5DefFte5lgN6ny0sC++LpEw1Ct52ZxTYADnULXSKaHyBo\nNUwy2pLfF4rbvPE6CAGslxgY0c1qfmMO68eWwENf7Sn1HiVl8TzMg1bUA/V1\nTN+VfkR1Mx5bDOM+66gySwfcPceIxwW4NJ3vKU6RUzGocuu8mxIxZQOIVIyM\ni/kof4Ujdu5PEy9VEv2E+fYz8m83ssiY1QAJBIa31yYBtU+TY6Q0E0TPA3Rh\nih/eFDnj0YSnxOJEJCT6AB9gnvm9/8DgloeNpukwVlQlTzN/0E0g9QULrTsj\nX3mEDULJ8YXB4a8pcUCqRxnhWYUQpIh48nkBtidQuse1dH6GtHNPWvHnE6ut\nOlaI3MS6tm9ftssZKjO9yD9fkaD8lfKl3X3GMs3bVEEqrKIyXCoj40f0hlPE\nvcQwVQfISz60ncZ6e5xUjX+L7NGEk5fMNpcbgj9SuCkWMQnTrtXd4FC6MzRL\njLDPGXxnC6lqdaSA4u1mpP+jWkwGDofG+6urm3NH3wdbNvWuPkoFtAuQsrj/\ndnHkE6bdsGUeXEUIp41QrND+ftrnAmrO9m1r3/yWr6zRjU/+uiiFrW++gjjS\nCN03\r\n=51CF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5dKM8q1E2buY/O9cR86lBURVq5pXsFEHRJ4XdCT397gIgGVUgqGJq/NMEiJboNqiY1pBPiYuOB+eRKAAUuUuUqjY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.3.13_1586511803696_0.7217487568015697"},"_hasShrinkwrap":false},"6.4.0-test.1586530558932":{"name":"ts-toolbelt","version":"6.4.0-test.1586530558932","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"8ba16fdd6abf0fcdb07a5e4a2ff5a5d021a7da32","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.4.0-test.1586530558932","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-VJUVMt/Y/U56UhrraglpYLC6bU89wk7NuhZYU+8Qh24pWXJtlQrdgQ0W4NoO7lDLQxlfpa3ThyUzt6djo5ey1Q==","shasum":"43edcfa60cbe6a5f1bb301037f36863988001b9d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.4.0-test.1586530558932.tgz","fileCount":6,"unpackedSize":373458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekIkWCRA9TVsSAnZWagAADP4QAIzwa++OXtCi+F1V3ORR\naJf/DO5cTvpUzZK5PIEHt30Dg67zxrOJiu1dPT+7tD+2mrwN+xeiMm10x0Kv\n2WcghmD0czuaWeE92XJZWl7v3gd9bYas8wOtwHJ2wBwvGJ3pXlJvnjYY7+b4\nytesbXZa1vB89V41n6b7pnKMxNblBgb2b2P70pwTDj4y0dNzCIy6XItKhhj1\nGJIAM9gsXgoGOlCWCOY7lcL80c+6wdFdjxOBqaVt8Hr8XCe2A43INS5xeWaW\niuB9Ho0JVgNeSsQ2gZPtsQNbDDipK7PiXM5RoR7QBVnYvChUxU8DB7IdduNW\nCwRs2hR7PDcS2dOBp5CGJHKH9N+FGRsywXTqoXBswkMPl7bXeE06CHgjSaLx\nKkocpKEh3TsPIrMtYKW+sNIG0qjKizPsNKAUQecMJ4V651OY6ZB1HszkBHUE\nmbDf5QfUi75Ga8f3oqZ6LCZ/oxe4yNPajNogBxbtTi/BgTKOIm3H4A6SIajd\nHMQxFtlAjg4HUTppGazeR2ITWHYv3dQKgwwJxnAb2Ou2d1l2E79OD2xNIi6T\nwA3zI5XuJwiQ+lFtKLHBZ5Kql28I4Qh4P+TWhvHKab6A4rSX0YWSRihyFMBA\nT2ae1gi6c2DmAKWNielLoPI0s3jFiUPfDZTV9CHy/lhiXFL5Jb276bVThnaC\nuXdh\r\n=j4xH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd6taMPTjkVOeBjVMNx8yibBho/yB7jWE+PciggZaJuwIgb2ZR5CrIuMpBMHEYfnmyS6cdr42hxEiyxxaBv+L3Ve4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.4.0-test.1586530558932_1586530581633_0.12676132270860885"},"_hasShrinkwrap":false},"6.4.1-test.1586532074169":{"name":"ts-toolbelt","version":"6.4.1-test.1586532074169","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"5122dcf1421edc55beecc9544553261cf02ab7e5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.4.1-test.1586532074169","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-X5eLt+gVw8d2/6eSIx1PnGncn6JVzFc9hTxsTTKD3/K2+jN9I5brjdeP5lNKD/ms0xrE//S3hsamy52cujAO2g==","shasum":"3b96940c4238a89716f79fe8dffa093eb808a527","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.4.1-test.1586532074169.tgz","fileCount":6,"unpackedSize":373838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekI8DCRA9TVsSAnZWagAAxHsP+wZ5e5naRj91bOfLIyY/\nz6EWofzoLQ67LaW+xiIyJDM1iPHa+JjlTtKwCEFbdIIOkPX7cLqKKqLLRB13\n3cO7pCwHS1o068685cVvV7SsU4i4wD3EH+SmsuiYddqi+hWzHlcwxKJbgEp7\nEvWrpFLtOF9ZvZG3AQtu2TIQGzmb6IJ2wtUydPXXwcIt9LV3AtGtdMtH3YL5\ne35h6ntTxexCcFrG3dKvJyLMTrA/glAM7Ieq5nMu2c2ALLZdhpWPkfQsygMi\nhzdu8AkxKHAHQoDupQjdy3s/roBW098GSvEEiFmFTUnlY67UT9xppxY7E62A\n9JjO8GKuuxvQLdoQqUFACa2ZWdV/wrvSFoW+4nhnFDmaCbILeeAm9sHRVuPx\nPhMApPUFpyLddGozlyo38JiJiKnGCIOp9BBRq4qQv4aJpXJ1iuz9irL89Kk7\n/aDwea/BAjKf/YZnX/sV1PsGwuvIHXwNJe4LOOFADbq82mSIfqFJgOwOuv3I\nZR/Mj3Z4rD36pxq5bxAJVJ+MiTydzS52ji2U3EOAWsABz+hh/e3H6MjUPrnb\n+/mz/2lZDtKsIsohF8OCQFV/tqvZmfx2nkbRR0AGFwQlEDgLnQLTINtj9T67\nah1KyZ/BQoSOgNZllPq2mWQiDgsTTQCJcc7YnUiW8dXASDRpePjuP2CeIuVO\n/sSu\r\n=LMxT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAnSekUYAvJE/dYxZ+OMnzDMfNzrOpgUetCbeblvhkYVAiEAnkTm5IP0RlAf1qbbsCV8Dp8oiTwHVrhAC/9yUMGpmzM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.4.1-test.1586532074169_1586532098717_0.1447861286962222"},"_hasShrinkwrap":false},"6.4.1":{"name":"ts-toolbelt","version":"6.4.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"5122dcf1421edc55beecc9544553261cf02ab7e5","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.4.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Defb6fnm+5zilF89Iui6BDZserK1yaSQbx+s13S+sUOOysfDZ5zYTYGq3zMgoqDQV+Fq0nt1h96tqXQe6qbGTQ==","shasum":"1072b69286fe403617995502836a1dad3da0096b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.4.1.tgz","fileCount":6,"unpackedSize":373819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekJA+CRA9TVsSAnZWagAAciQP/0jOCiWZMyBy+p4i0QL8\nusghGX1kQn5GWZUaA5yoogxez/i+NfYtkrFAkbr3BmH6GoP0QIR1IFJcTy16\nrfINlmjFgN2n6vr/StSjZaA2Ld+8tmXOegsPxMz1Exk+xN95oVdw1pFNQQ3i\nHfpmhWcAyJ4mJV23Z9H+wm2L7dEFySDMzxHqZN4mm4kGiI4it9iCbiQ6S/6a\nrq1/C98a8S7cftcbBLSqnfVl1Jf+xCxCTN/WkKgfrB2sPNZ9NXPolR7ADcXD\nKpXiAnBolcghKXSXufyjfrwHCvzRN3EF4rtxInQowJoc18Js/jjCGvc+s9bE\nYj6USYShYqQn/BRpB1OBFBrRGQN0ehSdL7eFS5mf+L/hLkl0fB3Xw1+46rqh\na/Ae1Tmz7dZBp3ZWcuaOfD3kdxyqWg1IOUBptOda16eFKSFQ8PDJKOw7DTcJ\nxuaBagYq7cq78TEUx7H7epvAfIqgAUr4rfAAzcT/1lg602VOgU9/+PTtkBds\nIQJOkPpORPlaRqiValOXG4GORndCliyUJw2v8TZZ6ArNj3HmcTrsAo1yYq1R\nNtHwGUnFgniRUpnqZeGdheeFc3mwR06Rhne9t7eU6sfYBOFKShKSPxH2yu3x\nk1DYycpe3EMl3bxv8Nf1O0woEF2zTD/vIkKfu0K4eH8KLonxY2KWs+z0NTl8\ng+AQ\r\n=t8gt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDU+OIlRC/ri4NcLtO9bYt3/FLoNcHaRriH2NkU2cpJ6AiB9R8lDRYSp8nAEN5g3zKqBdO4jMFatH+09GXlFjAEhwg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.4.1_1586532413907_0.5332893361041773"},"_hasShrinkwrap":false},"6.4.2-test.1586553142361":{"name":"ts-toolbelt","version":"6.4.2-test.1586553142361","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"92f02a6ef7a010298313969fb9ce52fa9c2afe63","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.4.2-test.1586553142361","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-UecFJI3cEsEvUYuLEpvPCRMo4wNE6rsLYCIXUT+kbxdi0slB5Hgxj8JK+4JYzLNubWrHULOo3/PAshucB62DfA==","shasum":"00bedfad9423a0eb4d3e34e060b4cc27320b6e82","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.4.2-test.1586553142361.tgz","fileCount":6,"unpackedSize":399776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekOFOCRA9TVsSAnZWagAAF2cP/i9PybzBVqgPRgOW7u4Y\nPp1sDJ8ZIHixHYQuoPc2fcaHH+i8nvusxRXZw/PQPDE7VNUtxqFe+1zdYJhp\n24whahETAidM8G7Hhr68csrjVvjYnO9wOuvBjkMOvCTZKbFxGc0V7FbW7Nfc\n+SE4jnKYjwNJuCQKN3oip41TsW37XmaKHVXc2KFOcopy626zEQ7E61sguVCJ\n4ic++XAyk0EHKdOSJDJe9IAqlqS2CIiflhjyYfNfbzdK7K0f8FY01hcIeDGe\ntJcE7ahmtSRVQrHkhLlcPhAefMMbPnnAwpXPgFJU5ogtZzCW/sPhfTeYWPLu\nTFtaf/dnhibvwVu67/J7mgPRdkiN6PBspGG1ZIbMDDtjnVhnfAYTT9I5GAxq\nATsXeLSmfH+Ol5BIT7ZJSNpD2Yc/0jzU8B72Dikw3tQw9cnY8aQY4t7faxaW\n5pRG4VUw6j+UTphvdQ5GCvBNxpE5dAjHIX9MdJsG73eSQg3tC0EjspUC6hfw\n2t9lyZW+XTpe6L1bUF8j/+hqVBvcNo9kHDYsKE0F/yr5qWFrcCMuNsAEGW8q\nZUfI6Xe0+D57S1aQARJW11/lJa1CWIydJxmIZyMDU+1r7IWTbM4c97G3PSws\nbMqO7L12486lRzUOMhekLe46k89h2ULt2cpTkAbgJLoAJYv/VPSHK1r6OCcj\nIzqm\r\n=/k2e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsQyJKtjMJ/EaDHIqTotyGra0sVahqiq+l0ONPRSbwZQIhAKnH393511OehQNmLIf/tyGKOV36jc03E3X2Gn/YGtea"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.4.2-test.1586553142361_1586553166280_0.7228694306833272"},"_hasShrinkwrap":false},"6.4.2":{"name":"ts-toolbelt","version":"6.4.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"92f02a6ef7a010298313969fb9ce52fa9c2afe63","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.4.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-B27axztBC+3K4D1cuaRO3ygMcyR54LRpQxlt1zNIS9RnqDwrlDoVlIIazDqWxLuRaFzGWNvDLkjDgs3eeLEVig==","shasum":"97df4fc577eccccfbe8929d82ab364d86ea99548","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.4.2.tgz","fileCount":6,"unpackedSize":399757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekOKDCRA9TVsSAnZWagAAP8cP/RfjE6Y07UsD4+Fnscj5\nzyY/cLTxD0DZ5bWmqc+WfSixdEnBbOmkQzz1ekEqriKKBNekB1P2LBnd4HGi\nK2/P0PUq2uNetOINY13n8Z74Mfs18zsYa85P+4KTEJ1FYRZBxC1rMJnrFLg/\ns5Xn4jSzirdNbgrEaWz+thqMHGgNeQFpNlYBL91EzIP/yTLl6E7DJbDngsPh\nVzXJAfBIPG6KXFnGi7k8hSItUSIZI9gldXJ0oWRCsACd3SWUSLwiX3w5LZ/t\n9Vm8Ozy9Qzxlw2sh0V1IHd3XPUreUrEARnQrZ8AuwUqf0ihD4Q1G6o6PVnTk\nKphIo2k1S/alXoVFl8dGpln8GjTLOmxUhdn2IBtgPPZ2flWrRICSSmyo2vIc\net3geX86Q03RH0Pldft/Lu2FjtNbipQjO0Jq9d8IJ3xgsD03oBhwU6ph6Oql\nmreQ6AJJy/vSeMhHyWBL03WhvNqIEFOij9jkNOgcB8+GioyRxqlNL3riD1iF\npHc1T7es8noxivQRT0l/Io5ckukVQbjZfkmzF/lzjkPDHY2a9aT/tdiV7+x5\nDs/gjVzA812/QPLkiPiEYNOK5mjJnMzIzrKpwqwj9Uypq4OgJqX5tn5eLNiJ\nvhWe9Dpw6E6h4ygdIM4d53R4ls6suvXi9W+tFYIRCtFEOgcg146qbFt0vGr6\nm5VV\r\n=B+XR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0z2t0odKT/6J/By7Sh7m2EtO781Xw2EC8lVGVNwn8rQIhAIwl3s84fGOacqKmwN37r+NymxFkW51Mf27qSb5m5Lv6"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.4.2_1586553475012_0.2480376484816822"},"_hasShrinkwrap":false},"6.5.0-test.1587133243422":{"name":"ts-toolbelt","version":"6.5.0-test.1587133243422","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b7c80dc764e7b92d2db9c66a325b3a5746218b0e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.5.0-test.1587133243422","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Zo0GlIYseSJ1K9DdcQgh/XI8VkfKjfKbuqoXLh++ThP9C+ngy5LZ6Cr0qARgb7enCJFk33WoScn7xd+4iTDR1A==","shasum":"fdf162ad6114a2920dbdfe68974d4dda27db4730","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.5.0-test.1587133243422.tgz","fileCount":6,"unpackedSize":403793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJembtVCRA9TVsSAnZWagAApjAP/j+91Z5FIiJH6EbxfK0G\nZF2bU3u8Xxn/WHVEElkhGJU+sHb0d01Hd/R1DqPK+1cKQtpj+DagZGlweLlO\nSX48uyJnAUGTwV28NJyUrlwpRevS+T/4gV4SiojDT5178KFxtIRbJn5vXenG\ndkjAkFC6PI/JTWsKFFdjc6h3YsdGxkRVskDnl7ekuj8sSvPGuHw6aA/ibWpT\ni5hbP1apJL+/pqVsb0llqiClCwkFJLpcA8uHSCnIcsA2pR/9ZHfZhbgCt3BQ\nXsE1H9oWL2TPUh9brAgaeQACXDr736+z0kG+4Oc0g1EYrOR22sC+t093SdQB\nmeTSQx9GF3+OQ/pOM8SrOF6R2J/hnaz+1pey7OU4FgvQ26dWLKaBryzslJ8Y\nq7yDzn7SSaA2ZWcPip+J8mKD4/a4SpXxZceYrezPouaMj74jp48NCmqEC8PO\ny6xMkBoOZJI79B9ayRZ+vetqs7NJ+eOygLv6rwRRBHva++5ZCwJITwk42cJ7\neyN17uh5CRVaF+CqcC2Qo1ZLwcyY2UV12QJPgLw73juvj7KctzaIf5pPqSPz\nZHA69RpuDJH2wfWzFRQbCbd6Gdh4wAfjHMFtU+Ftweke53ksgiRXUNY349qq\n56H48tbGJ7OzYMnfcC+iUnAakV3YV4BHllOG39/IFNLqvoeGvhES2PuK/+Zo\nn1dy\r\n=eU5I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDk8bfgGbjcPlK44DFA9SzswunHK5eMH7Y2fvnPxpdJSwIgaSiCdoZd7hQrlKw7A6xy3V7V/+W91Wf4HzVbSND5wQY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.5.0-test.1587133243422_1587133269088_0.9426533641028936"},"_hasShrinkwrap":false},"6.5.0":{"name":"ts-toolbelt","version":"6.5.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"b7c80dc764e7b92d2db9c66a325b3a5746218b0e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.5.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-QvfAq5xK+lN2R1YpRMyQ/mDlP962u0ZTNJWMelpB4HWzsEqk0bJx0hz0ApVxrtH7dfyqBhMN31ju2z/wS15TqQ==","shasum":"9dcd68583e47dde2b2618945d7d7fff5bc599494","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.5.0.tgz","fileCount":6,"unpackedSize":403774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJembygCRA9TVsSAnZWagAA25sP/R6bZFkg4l+e08fMSsVy\nME1MbkKoH4yQskazxpoMbXHm3eFlExdqIpp4j6Mdq5biVHFob3mcqji+Bp5d\nid2PNQD1Cbijr1RUwsS/d0m/8u75aNVLCwjmaR4s1YNTNIwS78PKVBvGF7lN\nXYDGsPLO98YJRYlgpU3E2HfUkwJmT3/MEO9w+KbyrRn/qniCeYAsaI9Wh4FE\nB836uUEBJXzU7rX0pz//ER7fCIvp5iPLVUhDMRdBuSS8Fl0BO4CfpjnDCSbl\n/zzkwxQq4Mv2rmyx1wzdQe+vwp1oL4/kMJkuoL+BK68o8aHDVWsFS22fDtHq\ne1DbyuZNoRF0HhWICUW9zf6YcvnnsukMejRlCWYRYXOczFqEnYtTkQMstdOq\nvLTn0Ngz0mHTWXdZqYB4ZZ3/woF2GoBwzH0LvG4ksjY9ThvRtBUr1cJyBJjT\nk5QuNBp7wuP11x4W+KIya2q24NF7c1TxUR80+bpTXwEKepEnCMIE/n7tPgwv\n9NnyeNkNon1L+F2K4daWGhD061BEP2ir0fGab3HwEd1U8Euiyw56jjeo9jVj\nQYEiXOHXBz0Iko5Sq9RLE57RoS7UzWw8CSk3TD+NizTe4PDnCkD9BrvbCAbD\nN2P5W49cNl3+IN+rNcvVIITdf88A0avk4STM1AWHxJSisYOo7pBBQ/exYbAb\noCA7\r\n=YcA2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKOmkCTSyhe0Eu7mZPEljuSkN7lpFBqTv0t7pi4xjKfAiEA7M5VbxvpDf2nM04nGXg7/o+Hn49+VUyB47pPau7xm70="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.5.0_1587133600139_0.7416585280837829"},"_hasShrinkwrap":false},"6.5.1-test.1587231924920":{"name":"ts-toolbelt","version":"6.5.1-test.1587231924920","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"0d32a909bbb8c86077c78bb50ac21a227a62b463","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.5.1-test.1587231924920","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-/kis1ctZKA2SVimTNAufPak7xoRCzazLk8WTPFMvaYaOZtOIP/STKZwGNglgGGEKT9FR3QVUOW9i4XYd/K6yXQ==","shasum":"4168ec6a0ed9e1089b8e2184c3cbe493886a136c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.5.1-test.1587231924920.tgz","fileCount":6,"unpackedSize":404241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemzzOCRA9TVsSAnZWagAABO0P/RxoTmYSTVuIxEMFrRRw\nL9+yn9KwpAEKUaxISH1o7OCf/wJ4vP/iitmBzH/fHYWrOMno1620rK41qjB3\nQNfSmx2pso0G8zvkMlg5RJsSLnan7Jvst5QBAJc0pAP4xKWvO1hiomf5p5LP\n4mJf9PQskZuYFjA/GDmMpKbVgKT8ArHNulRmz01Gxcos055CXT616ujh1MxC\nUVKx3gJsM9Odj+5chsyL20dnHLHXT+3XUrBx7MeQN/LCadLjETfLpRxHoGsf\nfoy3alGgLQIgdb600fYKHrpBz2RNeiLN6esb6aukKMRbSwRcrQVWXs882p78\nNdJY8OGu1pLly4jwC8G4CzAE6bRrfJ45Ba+7ht4d7iqh1YP4W9hMnt0dULqG\ngbPncNoCpxjB28dRqQk3leqGQ1x/kkN7IeecZ06ZQ0oRgKgJwSl06nJjf0SP\n3t8wIhcN7SVcr5Ow2TqUlmN3wS25xJhcxHG/6qxzRXyx8iXNIZtFm9VcgEab\nGD4gcVZZa1bHKKsi5WBQP5JNadPzzI8tWapgmkZLCQZZ94iR0B0JTrG8GP36\n3Q9dhip/bX14CWai9sa0HxXA2U9iL1v+93dka4NbDYelyHkUoDDn2uQJxbmB\nLHoa0jdLrrsLwhLYPwpIGodvHTIVUlRcfqR5CJoEmRXK/KUnQgSnKIxZQ1LB\nWv81\r\n=RLMj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVawTb+AWJ62OyNLrkMO7sJpTpsdxDfPYnvvnOgQlWsQIhAIQsR2NtvVd1T5pODVh8k1i/VR5JuhQatMS8W8CtVm+p"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.5.1-test.1587231924920_1587231950098_0.5308374625236458"},"_hasShrinkwrap":false},"6.5.1":{"name":"ts-toolbelt","version":"6.5.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"0d32a909bbb8c86077c78bb50ac21a227a62b463","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.5.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zjnZ/vy1eUA0li3H0JXecl0R3jiP42snpLimsrppt9V3LLbM4NM4jMgjXQ4S67hvehq+r9CxpX4Wj6RnFRzReA==","shasum":"1316b8c6522797c0bee289ca5deaa159af846231","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.5.1.tgz","fileCount":6,"unpackedSize":404222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemz4aCRA9TVsSAnZWagAAXYMQAKI98BGyV5TaGKIwicZD\nkO7sLxPhslG+dQtrns/V75lQo3Ecz/PX9ztZJVHDTzo36NDN04jW1VEuDmZO\nf0/2UZc7QtWHnHlzaHP0Bmighj1kNF9fZZTVTkdFpRy6Nq56L/uSlVVoTMsv\nChr1jKAMFQAh+lLeWyYv/PwP1iewEAPfQEDIFi+dVVPhc1XHI7Rnal0tnMru\nSIHyHDTb4UA28XcmqRC8CvC8Acnx86xo0nmV9Fm1syBJ4Ke42w/SL4TkCQgy\n07HTs8sA7qr9fcKmNYxePLTMn3hIEm5JP81+9stJg23mTrfVQLC6vHxYUG4d\n8yYtCz1dIaG5V2iiQGpfSR4tM1iTBgl+weq/DtTgqpBLj097eF9inEr0cGtE\n4fDROOj3Fs+nnZSBaaUOEI78J4JD5iLcm+ikJSatp/WwT8/6MzmXawMbFD6P\nwUvKMsq4M589PUeBKcCm3XiQaGbRRc0L47myRfL/Qi/Fp5kTmL7Jhqt+O6j3\n2mOGYiN22txZW+SBCQqBBmreIbODg0v5e6kpU5ZynMrWgnGMjeb46a+1CY2U\nbN0U5DN4ZFg9bGbkRsPci9F9ov8V8JoyNOxenJLJ12jRkOP/r6B8Bie6rbyH\n+lfJisBrvT95rR04loGcRblf31m0ukns2Av5bk+hlwOzDTIwZOmz8fliDyt0\nOUUf\r\n=EMhp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE9ZYrt4md9LGfbyEKVlnKrVrCRrcJYvVpSTK4Haiq/PAiEAiWCaaoIhi20PP250Xqod7iXmKk9NLWvAZlwVL93oaFE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.5.1_1587232281704_0.1558014441432125"},"_hasShrinkwrap":false},"6.6.2-test.1588431514660":{"name":"ts-toolbelt","version":"6.6.2-test.1588431514660","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"7a9929d1a29c29053d3b430332232a7c26f3a881","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.6.2-test.1588431514660","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-wcADQIJuwiAZIH7TFZ8LmojhwnXkZX1xsrIb7a2QNZ7lXWjOVxX84JVQC3CH4xBcO0kX08DUgZl8R64AUditfg==","shasum":"04f9e9c22d4331dea43f9b02a107593fc8b45a33","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.6.2-test.1588431514660.tgz","fileCount":6,"unpackedSize":406239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerYquCRA9TVsSAnZWagAAYOYP+wTE+G2bODqjjMCHbI0X\ndbnEGFaLQ8QgZh0Y8e9N6I2XXOZTRg5qqvxNMRdKYcTPrkTtFvsV7hhKTCrO\nQ1OqO5bZlBGdkXTlUkZYLSiVoTZdT3PRmNqwqpnbJy6d4PsN4ojwh6gB7CM5\nqdUF9QY5FqOwRSKzAOQjloziz/5dn6K1/+YM2RtUKDyY8yusW4/RlueL1vKN\ngxLdU/yDsLVedqYhGwLl1w3eTOO13zKo2/20jhDjxLyxjk8pypCgK0K9zmPj\nAA5+S5GvF4QF7wxYviEr2xmBNw51iDZxFgG7JehiXEpQsRNTZYztdQgJRmOM\nW4xotJMzAedmg7KFjE+ul1GWteNOn0yofCqhGLoZwa5ysjGUovCSlKRCGy1C\nVZxaTfQcHsGiPujIkks2K4+jLfGknP1dWOZtmVhAg9aIHLFOXJsRSXNKumFL\nX2bmOPGOKz76OlZ0VB/5luHqS1qiFRzS4nc2opUFvJDAdtuwf8UhtMp28DTq\nx9meh5+q2M9tUJ+5lhaMvoYuCAR1m16mGnMW95luXqRiLkRK7S1yLkXguIpE\nFhgNgOr4LlTkQCRSb+RnxRRi2noZMrHJ4ZuFDE7areZrp4cZ9kvxezSxAk4w\npgMxs8/Ee1XaUqWiLMQjefOQwoW7UIJB+SLmGlnGI+7CxjvQah9Z75yy2iFO\nETtJ\r\n=Odl2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC0QHZersryy4BLhqtbjHXEF/nlBYhEVaMyYKaDrKuU3AiBCg4WBYrTG409JVTbE/0ahWpWsUtxkWwWUwSsPDqqiqQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.6.2-test.1588431514660_1588431533659_0.27660445388944543"},"_hasShrinkwrap":false},"6.6.2":{"name":"ts-toolbelt","version":"6.6.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"7a9929d1a29c29053d3b430332232a7c26f3a881","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.6.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-P0fN4yv9rkTmKsu/Xew8heopmQ3fDnCF5tY4CV1ZMAUeBHJA6QsJhMEdxtWNdgV7dnKKAAw+A12azm2cONQ6NQ==","shasum":"2e1681ff654bf0ab24636d2ff1cbc802316b391f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.6.2.tgz","fileCount":6,"unpackedSize":406220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerYvgCRA9TVsSAnZWagAAYYAQAJ63GJ8o4AFG73vSFsZK\n3voFfh9PiTh0uiq6mG/ejJSaUXMMqK+bamLzjvpDYkj8vL0qkEbFB5eIh3HP\nATa8QPLFdK7VRlxkVT4KYYfO+IYLnYaj7+sVvy4MT0OEuK3Ke5AMg+mqoh1V\nzGuXmEvK+qmsXVNpFlPPCKc4u+NTWnNo5EeuV4wYe20Cz1dgMNAHWdMEjvfG\nFgPay6MrMOtrrK6K/qxkc8gxsYtBFA8DpcvTsiVyIJdCA/U6pTMnApH/bTLD\nEp0CCdiZSdKnz7w+VvfjaN33LaSTExxb/36326YbnYAt+NaADRTblE4uxlNq\nUzqQPrHFHoExkXbLHhv9eBw7MrUufK4e48MS0eqERA5II2w15EOvxY+vCJSp\n1RY3FlMwAnhsok9EIgljaKAB0inybq6YObsD0ADuoLmtlJTp/akFlmEY/iZC\njcRirLGSkZxAES0Zd38JbqfCZAyDhe1L1VzsCcPDFA3W3t05nIOavb2pqbEp\nxSAa5ikSpiiyOwLNNjNto3jW9Wl2dg0aPj+k9GqP45J244nMUEqOXfPxuh7s\nnrVwOtcCxL5LWygIQWvdimYKkzI6eQRux+WraHZyUtvlyqRe1UrELRgEy3LJ\nq9zpHsXcZNzOYn6u2fSWjP9ZO8Fi7yg98veGpHHPRZT7wYQOG/uK/amZKqqi\nmMD8\r\n=rVzA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIErat1BP8FnHFlmBNrcP16MEGsU0NtbPg+9F4zPipcpeAiBcSWsMP19uTmC7JVlW0Y2wBYwqYcKmM9/kgLUPh7GkXw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.6.2_1588431839907_0.8456149933617045"},"_hasShrinkwrap":false},"6.7.1-test.1588969227099":{"name":"ts-toolbelt","version":"6.7.1-test.1588969227099","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"d8f0fa09a4e3110c9ef0086747dd39cda6fb6e2c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is optional, but enable whenever possible \n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.1-test.1588969227099","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-29CucR3STRbzwlweYxeRE3yxFPBFXbJcvK0XFz7EBQJwyKW1XRLVHxfz9gIH2tiecRqFy35aWQ+m2NI6IIklng==","shasum":"b4aee7af4e526a32048d279351a43334c1494496","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.1-test.1588969227099.tgz","fileCount":6,"unpackedSize":152546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetb8hCRA9TVsSAnZWagAAFfwP/2kZD12pk6kReCATuWVM\nLP5o3C0dRc5enTZoondxDXmC77eFC7BN4HoNFUQ/ni+nmI92CpCLrFrU5rEs\n+KmHGSkIN257L5tR38r//jZr5nPLLnRMKvyKnvg9vH4ElBXr5AQoIwljSYOU\nS0S+vJHgqgReKtPzzLPuaVQreD6vJm5o/vydBniftpqjgJRcfx0myNJh1JLc\n7YBT0c5/3amJJXGCqbmZ6zIJsXKgSgR7eIXLOb1EwW/b+P6Z/5/OzV0rxlS3\nmLZJo7oR7PQgG9/AWF/XcsId3c4oBvFPNb10sdRrwNz47hlSFuACNgeFA+fL\n3f3N9Xs85IdLDcOjqh6XCKDepLNEAkoiSE5LT8Gw8gFvEu8QQNqwFNKt4utG\nKMiJkLQjaLayaqj7bJcGh/diV78gWxSPoVZ22a2LYVG24lL7UzJOx6YisPiD\nca4OfqNvocRGFWAe0BX/+0GzJmfNlc0OiR8kswvOpve7Ph3S7p/CIQ7a9+g6\nfRKp76aayiTjBCyL9yUSql+lmf7LK5MuHdsRRcdZgJvxGmlxZDqS7KQ0oteF\nEqlb1euI3CoxI0CoN70hdMFOn1WLw6BP/7v333gHfT7/cAE5ehBJ3IbypUdV\nueYSeSDBFdRk6FMfw84sJMpPFFTkacsEnVa0W+GB1M4rmOf1WePQgdt3T+rO\n0TKw\r\n=LmS/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE0HDtj3aSvugK7Rz11BkH/9tl+iNfEkNhh1O7D4LJwWAiEApudJA9fqqUzSVcQ2OzwJBnHF+ZtRZemFnnFghR0OKJY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.1-test.1588969227099_1588969249183_0.7902480744903195"},"_hasShrinkwrap":false},"6.7.2-test.1588969772826":{"name":"ts-toolbelt","version":"6.7.2-test.1588969772826","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"aa2ec3e4c0a3cdcd3cee4336f89c3fa9d24037de","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest, and most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How do I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** & **reusability** within your codebase\n* Computed types are always **readable**, like if you typed it\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* This package aims to be the home of all **utility types**\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +50MB)\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n<details>\n<summary>\n<b>Expand to See More</b>\n</summary>\n\n| Object                                                                                          | List                                                                                  | Function                                                                                      | Any                                                                                           |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)                 | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)           | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)             | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html)            |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)                   | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)               | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_misc_promisify_.html)             |                                                                                               |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)                 | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html)         |                                                                                               |                                                                                               |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)           |                                                                                               |                                                                                               |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)               | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)                 |                                                                                               |                                                                                               |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html)         |                                                                                               |                                                                                               |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)               | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)               |                                                                                               |                                                                                               |\n| [PathUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pathup_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)               |                                                                                       |                                                                                               |                                                                                               |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)                   |                                                                                       |                                                                                               |                                                                                               |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)               |                                                                                       |                                                                                               |                                                                                               |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n</details>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.6.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is optional, but enable whenever possible \n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with the above categories.\n\n**The documentation is complete but needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md), and I will update the docs.\n\n### Imports\n\nThere are many ways to import the types into your project:\n\n* Explicit\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* Compact\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* Portable\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.2-test.1588969772826","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Rija59Rb5iOHRqZ1LzETlFaftdU5dEnFsuEEOcipWj6XilJH3/fgJ0qC3kiZJ6TNlIVbcFpP8YSZ3zBAHaeEcg==","shasum":"50a6cf396a8e682e86ae4ef81676f2f8b6ec7c71","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.2-test.1588969772826.tgz","fileCount":6,"unpackedSize":408519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetcFDCRA9TVsSAnZWagAA0FEP/0WjlsPQr937Ts9xQwUt\n/WXGhaSSBgS0xdv2vcLqDKIWWrLJrCPA1L67XUZTQ99yUcs0KtyehV9kUBXk\nnLug33yJCmagbt3wOQDeTbIkCbgpfxmWVGRJPP7yTfQcMAWkN+fb2ukiNFv4\nMc4tKzkqvT2QIANEBzssw2d4T4coF5a7v1k7M5ANzoOKxWQOb0T6Q/bBQWKS\nhpZrpAHasEmR+CTipIKBoS/rdp5ktyEHB1bcWGEgAsfKn15mhsYLooDWj6WG\nRAaRL45dPJRk/R2fogoaiaGw6/aJFO8I8KpkU9jVh7g9pIK7vPMRGKiD3mE0\nY2O54XMaHMo3CS4uk3xT0Q1eGGdbGSzdZ11QwWgbDTXx03Pi25fmh4el4bRU\n/7SHhy+WWbiEH/kXFHl9gMIkQiIc8ilq0XUdCmE3gd+huMVi2/QPWbWe3ojN\n6F+OZ4nc9kgDk9cgPzR9hI8J6NHCaROe0JZiRia4/UzTFrev14HgrZTKQNYp\nyf+WLaPUQbn5PRootWl0Yfv4bwEMK9XiCmzsyXnn3jWZU/Hhc2ma6KCH+sa9\nWnqD1vIyIY5mOa0NfghFyvzbG0mnV1r/CNbcRWVaCYI78I5MrZY+03c0GSCs\nVYLW1169uIwANcGJvQAKPTTlxYVMl+/Ur13TfVjR3Eal8eD8Ti6kuA68rFvA\nj22X\r\n=2yiq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGQh5IEax8IGDalmIJbd+lNTewfbGxaZvLcfo6w6fNwAiEAjidB4hia6qhrivmQctYuuxhxRFVbY4VLiACyQTdM8O4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.2-test.1588969772826_1588969795398_0.20982934136769527"},"_hasShrinkwrap":false},"6.7.2":{"name":"ts-toolbelt","version":"6.7.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"aa2ec3e4c0a3cdcd3cee4336f89c3fa9d24037de","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-JMZv+tepq6tZ5HFCanwI+9VYdXB0dVACFKeImeyFsLqxBFlGeC8AljSJvh1Z45ETRKmSP25Q+aEYInFKN2NOeg==","shasum":"7ebf53ed19eb068647cf777bf2028df9362a93ac","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.2.tgz","fileCount":6,"unpackedSize":408500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetcJ8CRA9TVsSAnZWagAAE4wQAJsbjPi2pX1osKzFPuS6\ny9jb6TrVPMOch7VZg8SAYsgI5dKMYfCS5D2m1LexKesVKSvS6XZkJ4Zad4M4\nOzbesDoOk3XSMHqMKTWat5ms4yc/ExJ2wD1HfgKs5+n7+zS/Mx+z9Ar8xCqs\nITSXjoZ8LnpLCNdy/EU1i8jg24yWrPKgPNz66BCerQ83PUVqol+opy+f1wWp\nLzTXOchiDMO+hUTFCccsI6XYomh+vi6ofKiSGIG7Wk0vBHullnRBu2hPyddH\n/K0ORYf8ta5HXINEWKpbRAMK3R0hA1QMHG8eXQLbk0EnJdopHfjXZ09NVDoZ\njMuSycltqbsT8Vsj1E+BcCDvtCsDqrjgvByciLToaw/xAJJFQi58ExKlsBtS\n8eOSMdgozBdTU2X9kgUIE6OEmJt6FE2ex09FjtQx4xXzGCu6oyyNZNRVGH/T\nehVEAaAWtvzfRT+smfl/njUq9p0Br+EBQP/TNFgntqdvXCfXqkASI/9n7V+v\nHj+JbQAGvQjQQLZ5yhEHFeEBdQ/oFrJOV/ktmqmaXrkNi5jwop00cLp6R0cJ\nZohn5HrfzcCTCKkyA0yMDnw60GX3QS+BmzhBo0m6S7yWpqTZ4QL/1ymVFdgH\nQXp/mPdG6gG9qsiKApX2ck9uRkO4z2hllJjs1KpkWl/lFXez5Iw/CwPT9IS3\n7qLA\r\n=qA4o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDivbIR2pJ17UMLh8COp5KpdpCFFpQCLO7WUys7rayecQIgZFE29mFeetuPAepv0wha8G2kW8TxvWgL1FIKPmzRVD8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.2_1588970108334_0.20832116844643744"},"_hasShrinkwrap":false},"6.7.3-test.1589194246214":{"name":"ts-toolbelt","version":"6.7.3-test.1589194246214","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a9843b79e6542282737f4e233a1e9c0534e1f4ab","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** and **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +150MB)\n* Computed types are always **readable**, just like if you typed it\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.3-test.1589194246214","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-kcV0NmfSqH0oiE4p5MkIsyWdRAnf7I144dGD9kgk2ydeGeDMy0pz9tdJxO6EDHCErUdDorb4jNhPADC+fpIqEQ==","shasum":"0b956ce9dfc7102b7c184740646825433ffc306e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.3-test.1589194246214.tgz","fileCount":6,"unpackedSize":414519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuS4dCRA9TVsSAnZWagAA/IQQAKAZXb9I12ABmlcoW/fB\nBB8JWK5PZal+Yu5t/uH7W541hy9p3lliWylDy364JE0Ewn2SA8FI0m5DDivw\njmFTEEliTEbBYE1AMLURyKJ23tE0fvdOH3jgryrhDe2EnUtrFUaVNFzQh2Kg\novjVSqLZ3rGsHsIi9c5gLEwhE9GWP3Bxa1CNuoBN7Ty8CjaMn2VB3op3FWxD\n73s2uu9Tjjwm9YT176byhXMfqXJMHBbJKoKXy9ieF9z0nhWzV3xv4NWMu+Vu\nCnf0NeIGhldalPq42H/hEvE45a3ejNctCNs5s8p+F0dr90P8/urS11QZ+W9N\ngTz18Sc/4+87a0xJpzWKjxnmyYcjQkOIjkMFx7J4ZLMzW4l1znTp3alVx0yV\nTERSdtR2U4ZnDVmFQvxlFFh526uV4flKAyqOSpj/VN9f/+n+n8jGA2yLTzsf\nMompQFI3E85Vm2WstCDzy7I2F6zxQy7EdibfFJzGiExer2mAIAfHOIzh+oiy\nZm8xGnvQhe+xcCdCqUT/6SoYEiCyDPGqWPTtBRas+03NuNOhD0OkSycsA31/\n4WpqJY+qShnsgtYNvs8uP7unPJJRjIkGxXXMJPkQ69yOepmaWEfgBtXbfIoI\n1pCMmk+SMdSqdbT8jao/15yIf9pyKb200+6X6pH56UBOzANS1STUNdI9378a\nZpW6\r\n=iN2D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWlVg37rMSMixUzqu1lZZmSR1aCnuvdBfAVxtR4+0RGgIhAMTRzdEAD+m0bjoegqFVcObDgkUYGOz83asZO74CSw6A"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.3-test.1589194246214_1589194268688_0.29836184029621005"},"_hasShrinkwrap":false},"6.7.3":{"name":"ts-toolbelt","version":"6.7.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"a9843b79e6542282737f4e233a1e9c0534e1f4ab","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.3","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-y27DzJbKLFfg0LHgc6aaBgK5TSXgggnSCcdeqlr64RyFOmzTp0ouN1Nz0H80b4cwfLJsseMkYYTeWS6ufZbErQ==","shasum":"9b7c5346c01aca920635069c93471fac2bbafda4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.3.tgz","fileCount":6,"unpackedSize":414500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuS9OCRA9TVsSAnZWagAAiksP/3VvQzLo3wn8i9xPtw9O\nyRxjCIwKtoXnVajGjLSeNWaQ4HwmXlVLl6Nd8pMJsgTuslxSFtx2X8J1ldNT\n4CosPD/BWkVl6L0aarLOS+0oQXoNB4I6oHbNitVjwArLEDKHSejetSRLEnub\nGDO0L1WLMV4nO3BZqPbojIY9qJFOHx915CuTYkmhIvTOEzf8JieG6Ry/nDpC\nmwuBiwqUKlhxyJ1ikeGmvmBt/u+emHb1FZNThkjlesfxIR2Fzhsp+eh5KXaa\nyhlMHX3goyk9b24ZtCNjnV38ef+6C3MkRj9UA6n3nZycDe6nGae0qFi7mPnL\n4naVgPEBg3CIe5HYsIMUjsCgy3YbdThmAbIaAzHW5FkvMD36IpmG6O8OIshA\n6G36IAsZn5JtjsKBAgboCkaWpPeOle9x9nM9nnZn1kFmSw+A4T+ZrZ1x+ZCy\nmorbyUmcXPGqVpbV9j4VYHqqxe9drZk0jcbumvNUCSln5e/a4xJUkM9fueng\nKmDp9ENeTeymHn7NVRSjsfXG99xFsgAI8TeAzAO0XVm0wSLmSMoQPHVkbpgC\nRlXzuin6qNe4IrcEafO+4kD7jGVYk0mz5FnDRH6lC9BoqoCQ5bq1gIg7cap/\n5CQKP7gIaSkRQ7NO6oWz9ayk5+NtKAWDLWbVuyj2j44+mHAsY5ruzCPqp6fz\nkAvY\r\n=yjTc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFJnzXu1WJ0hh9rA7LdNpjHXzOoxEABm2kd31f129zBjAiEA1BGXALRq0gA1ahHWY5B9XI+kEdnWsJ76Oq9hklI6ZbQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.3_1589194574077_0.19163310228602115"},"_hasShrinkwrap":false},"6.7.4-test.1589217055201":{"name":"ts-toolbelt","version":"6.7.4-test.1589217055201","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"827c9cc6090a832371f33a6920412fdbf718de4d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** and **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +150MB)\n* Computed types are always **readable**, just like if you typed it\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.4-test.1589217055201","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-7Nrlvl3gehOJ3SCb0ETqRrKaJ6VM0yxZLH6W/Gq6PtCVP0exCxcjyoeRgfwhpV0HXhoOKS3afpsVxwGwwt5G1g==","shasum":"2936b514a7489fb6b07ed33c76f79d8c2846abeb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.4-test.1589217055201.tgz","fileCount":6,"unpackedSize":412940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuYc3CRA9TVsSAnZWagAAdHEP/R1ZDFnY5UDkRU8+d6N7\nf5e+/CZuLQJppqVckobakz33TtyOqcPxiZSXo2PAKoDLHOArsT14Oxl+rGwl\nQSdBo/ICc6Fhsd6bLTJiduZd3RlBcm8ODo96DDIg3FOloinJnRSz3BAVeHrm\nUxfoujtxvT1V6vfIP/9kcG4OhXD+G92zqN95P5Dye4CCjwPEZmDpPdJmH0Dy\nd6mhssmI9/5nOjwic8DUMn97RgBCyTDzFBEPusKrrbKgTW025x/nHYjj7Pa5\nVIDhJxmnURi+h7ZKW/7HwnC1qL/2Uk3ENE44F4I3TIF7e5XJ41nKgPZS2GN2\n2S+wZqXLiaH5xwp1xfcTjjwe5l03EwvtM8xj8t3cfnM2wk9rLzKnwutp94nW\namppOH9rlCn2k6QmlXw6lfbSB4tYq6s7LV3wZ9vq1x1qQKuSttfvoWX7RzpW\npyEs02JBTO6g9h8lp3eBtreCOJg8yvd3WKcJzW0nH8IogXURKnCT0RNf1B1P\nnR+W2yzY4ySCE+qPvkxozYlUWltz5nRlMdJ58qirtvMSJHLqhAkHyVPFPM3a\nTgpTBpwhB9UMLZegCC1qJutOGmarHEoIruKOJCkfvkZ4Tve/f8iAxQKjf6FT\n+O7hmPbVPPmVQPHbDsVceTiq0IkzoXrIDUZYTE6X9+ba/Nyk81h61Z9mQmLu\ndT4Q\r\n=89sV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHI0jEaaZYrbWkhxBeYVazrCSvuJe2bKHwsYId9IzAJbAiEAsfPQwjRf5h7i8olygWMfruBKqAJSTuF1dlc7CGdUHKw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.4-test.1589217055201_1589217078550_0.5492866246804342"},"_hasShrinkwrap":false},"6.7.4":{"name":"ts-toolbelt","version":"6.7.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"827c9cc6090a832371f33a6920412fdbf718de4d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-cP8q7BnIyuevMyBpq+TVKf3NvSS70S+BLdhzHVeV/5WNPMoUxN5YWMKgUd54qAwWgk6n2USHi/2XFIxZJa+30g==","shasum":"30e6999578a82ed4636563cb525bb3664a255760","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.4.tgz","fileCount":6,"unpackedSize":412921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuYiFCRA9TVsSAnZWagAAYA8P/jXRTefTn6gmMOgxO8sj\nHIhktXWX6iu6qJ8M2ZVXvzZ2k2J9r/UC8/hMlsrTY0ersiR967OIBM2AyxqA\nY51e8bAUqZ2JgIgNgfkFYCh1uUnvJ67lX+dIi9HenLWCOR9/1ZVBUUw5llWu\ncg7psq2YHMyuuohjC0JH5JtDKzcjwkTXuRPNK0JOnfFdz6L8y8XxnucPmdF9\n1guMfqqdbr+VW+/wdUvAdoRFP1e7s/nlRzLA3V9R5Prc1T+a9DWscn+NcoOU\nRXdMXw47DLcjUO7qeURggA4YMVzBcvrHGLvnE89vMbBBaeRP2Gee/336PhLS\nZy+VaP1utuObDJj+JpL+Mjap29E2zR1L5b+IE+AhviyCZb02TRaT9tRtk+uc\nG0eUgZYBAHrKk13KhqFm+MApM8M8J3f22IpsHQWJl9/OpugPB7Zb1I5NLl4E\n2MXrXtIkf84MK0thgvFGKa6OnIfble3jeGxQ+gpyGDur2yY1ecYTlFjwwh3Q\ng+73k6D2h3Xrkm5sdYkaiYePJ8tH65sFmkota8UNsB3P7d7OqPYQ07HrPKIG\nqIGDnI5jxJxjzppOsO7rfkv413rVqjWXeFSf8cWxNIOr/vE9fzrvL/lUMngr\nCKCQtUK8s0PLellXTpYUff37OELH/Y4JQqqpmxcEX1ZmvXv8D9E922bwy0AL\nWWKP\r\n=JFrD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGgfSoNVQGZ1vCm3QTF0MEyiQnHrrgMR5QcdjQvM2jBVAiEAo6fxb5Xdm0Q96A50TW3ICJb7fmtqYfGeS/dVAqGuiHw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.4_1589217412785_0.6531914197389774"},"_hasShrinkwrap":false},"6.7.5-test.1589451716304":{"name":"ts-toolbelt","version":"6.7.5-test.1589451716304","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"e8f06e54a152268899bbc68d08ec405810f93ed3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** and **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +150MB)\n* Computed types are always **readable**, just like if you typed it\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.5-test.1589451716304","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-gcJqSOYXV52VOE3Utua0vHnIzK5XGwjcIZ0E86Sq92G0F7/hYReK3TOsglOd1LN7nPbTLSqXAjjAYEmexABxjA==","shasum":"684b4b5c49c283027deac25f50060fd4d0fe69ad","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.5-test.1589451716304.tgz","fileCount":6,"unpackedSize":413209,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevRvbCRA9TVsSAnZWagAAS/IP/R0s8Xt0B0FyZdC2ipKh\nu2peQy8IOpAqZUE+nLel24mRLgY5R4TZa2EeGcGSvZtao/ze+A0ClykwRprA\nAgqZs/w3MJfbwX/ZD83Fuw1px0cymiKAjaj+aevA+iWnxt+iQ+Sif9y1UowX\n1XPopSAVffJBFE/T69GoYIoMZkS0zPNi/BS3lfcJv8DhaT7xBmPgGcsPqvBN\nlnjcQ9AdS4/yh1YlxdKdS9MfpJBAw/N5a1g2o+7BObKWEFPY9IyYjqvrbRpH\n39AltlzN6pf0pl/riE8KMbucUqqgDR/KTwg9R4F/fBnrW0F0FlrmSUbx8Cb/\nc0lCveZKqSQTA+7Fmj+X/RQpdztnzrqpeKQ64au+TzaNAzgws6bnubdzKoR1\nF2+7OefcXQ4mQNsNYnpF11HgTo0gMWQZSCzr+ARovd7Rk8wgU7jN+Y6B0nTW\n9bP3M8Lyk7ZTyoyxCVjyLL7jciqLgVpHJnToRWrlKTi6p1TkOriq+TwkAwxj\nMUhSE7JyK/bMMZqJVeArJNInV63NsEmfXEZirIekwJgWBezt84C+k7XK5HmC\nV01Okw3yjctjGkGozYpOhKpVGaYFNzajaIUrSy8MLlAdnE4yTPSdC4ciLAT8\nS3sbHwKFl64zeZNFt+XcWRKlkehMzwTJFiEykchxSwtb2zU/w9V9yKh96r50\n8JAw\r\n=q6t/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvwvUcdDM8zRKfpM8wnnKYbrYzfuUuEtGFwdgisfneNwIgLuILR+pklhtw+Q7tpP22USHmm67M32pFQlTke5G9ziw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.5-test.1589451716304_1589451738518_0.41294250324564374"},"_hasShrinkwrap":false},"6.7.5":{"name":"ts-toolbelt","version":"6.7.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"e8f06e54a152268899bbc68d08ec405810f93ed3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-N689lNmcKNNZb27x6+HarGxNe4MMYerortOATAxsJatwRstFZmboIdTPa0BzPdbF4qw39G8mtJYOSNkRQ/Hsmw==","shasum":"a89493f41908c2a461f57b5074aa286718b9a430","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.5.tgz","fileCount":6,"unpackedSize":413190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevR0dCRA9TVsSAnZWagAA/GIQAJHgeJO6Xs+479oQI5pC\nYU8QyXaux62yA2bRARFrX/WrsOtkc+szEx9gJxf0f2qnbpYnf/B7ZP/D+pwq\naRrF6Xc1gvP4CgwEbiBzKqqrODYyPGf5yJH84KrFsBcKjUT52ER4/XgpMTpR\nx8dyH5xMxJR5HDCQJapTku8Kaz4ODKaLAZae9RdG7ahRTlx+50WwLDMSYxrF\n/wiHemddzjPvk1P795QBRR66CVq1S3DI1+k5qaizPuGXmePS6k5MyXTbCSz1\nwlayaFCWF1ekOE+c2waUtSsXQu33xGxG8FBFDJJXo49aNUEI1gNwDDj0ETed\nQD+46LHu4FItCSEBOXwzQFFwDd59q2gsfWH/2fUqUWwID9dIYiPh6IAnoCOG\nQ20lJwqeWRF1+SsJQfpV/wzX2gF1yxZ20xfIFAsHw5UZ3NNKEgx85Udj1+Tn\nrjgENNIfHEvcbFmLN7mmdYMBe/T/T1Tf61B9zYWrIagoPvj/ggnDNfh8b9GU\nRfY0urD84ASxy7FU6fAIxXqAXzxxy90dedclzGYYyoMyV3I/I2bEdVa+iYvv\nVMh+d/T+XBbCv5LCt5J76FpvvGf2CYSgB4TN3yZ9RT3USR4EFPUGzHKBQd24\nhZ3VF3YOrrjrgiirrlgfRQFBJ/rE5wlzMpWnduhfuR1FQ1tkdPAIARaCiJ0b\nEyLr\r\n=TyPx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIATWwNwabKhglczvFwg52o6VG22oBBueN/ucNHxZG/EiAiB7uzUpxmsENvUTB23313dPAwQbwlkw7FKsrjPL9/sOQQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.5_1589452061071_0.30468123636994693"},"_hasShrinkwrap":false},"6.7.7-test.1589494156477":{"name":"ts-toolbelt","version":"6.7.7-test.1589494156477","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"8871aabee3ffbcbb640e3012ef547a29b542151e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** and **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +150MB)\n* Computed types are always **readable**, just like if you typed it\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.7-test.1589494156477","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-iE3V9Xurv/K/1XYkK44/j7o5bwIRXnCu37ycA+uDxh3iyTsx7t1aqrZlrv6gryhJn/itSx0sQCD5d8rx8MOaOw==","shasum":"543518b2056e75903d0479c3be6aef9ab6b42d02","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.7-test.1589494156477.tgz","fileCount":6,"unpackedSize":414649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevcGkCRA9TVsSAnZWagAADNoP/1ri9kMw8otTc6o9zppS\nMOoRiKyUoJ8taU6OjZXyKi3UP701aLkp9zNlAFvqFzIpW9/mnHtvLbva/K7A\nMGaUGfL/n6MVvp7StIi3Ep06larOR2oIrYZKaDKX+ZgfmSubjS9qHRKe7Xph\n6lbGv9ZfiK6xd1Q/kl+G3t4KwrHaqKFIyObNtZt/h6Jrx67o1nkhjRFBFeZd\nFEG/2hoUL8wjYpc7J2ZIUutpmrxUyD2i5n3czcpX2ZSznoC/Ftq8o+J0OuQb\nfaHdW/snCab+ILBlRJXEFO6nEXaXNZt97USYIlLtCBqf/F5aGHXf8dOpIqG3\n+6b4cI37vsJV+Jv4EtTn2DU87gfYX/eMToQ1gaVG5gaaG3XCXG9aY4O9iJyi\nowzWawh1PolBeBOl/wCc0cIKdNiBhOty3HIHj8oI/tK7ER71WlCzH6/i84ma\n/rnvolGxVxwDcqAe3mn0uBYXybgGw5KkzTvANMMOvBHmG61vIfDwIXMtgQEC\nBGKp2y5TPECDUrpaX9SQex3XavIAYq5hvmh6wEoRN8trdEbYppCzNvVYhftx\nfTxiyV9kUev219aO/naUvHmszAf6zVeRmL3kKG+KoKuNpiReqBkxzNjRDAod\nvCCVw+F16dy3Qj1I+t/984BoStWvXPvUaymWKa/2qGQQlci21QOGa2jZG5uA\nZDFW\r\n=uicx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG/lwXDS1VLWSIA6jdm2GyjhkC10OQ9Uf5e+nQvh/cn9AiEApsFJvN8k7EKllb2vHzm8nU5lg8xxw0I4gqKqkE8XNkw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.7-test.1589494156477_1589494179935_0.32070823868345566"},"_hasShrinkwrap":false},"6.7.7":{"name":"ts-toolbelt","version":"6.7.7","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"8871aabee3ffbcbb640e3012ef547a29b542151e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.7.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-GrgXML3KOnYymiyFNEohhizPtO+ZgTwEN9oIR+SvP6EPP5cj4qH1Xi5CU4iobgMUNYMEVhXqnBLY1tSonXwE+g==","shasum":"4d7f34cafd519bf0f1d6da5a4b07889db6ba0184","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.7.7.tgz","fileCount":6,"unpackedSize":414630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevcLvCRA9TVsSAnZWagAAnocP/in0Ts3s9ysAF1BFjpI3\nQY+WkjVaMGHyoo4VN/gvsbF5cbqyoydWLnFeof/Pu1v/tjHp72Z7OObPPlPy\njmPcmMeVMupevrnhdh3g4Si2qiZALJ9dtl3BvwGAwjtqRXqsESTDSmsQ+Bbw\nF5rsECdIuk42d/xqw78Lme44BN+p4DPdOJ8JO4Cqcltw3oE05VESVGlWkXJq\nfPymSBMAslNe8Tv6WeRSBUdxaxnfIGoclGn/4qFBx/SlVHWaRidlxQinwUCD\nw7P+Xu5QDT313RY6JzmyJnBlcOSPl+l7pbvHvTmTi62Ntv67mOiFfAivoMKF\nnGGS6HEJi/2+vPx3eKXHLWa4gmrX2lL06JyfI8H0lW863Cs4XvU5hXjlC7j/\nSlpOkQd0AEyPRu2bX2ZPY1wHE+yPQcGa17+ipxdycv+iOUj6y1nGOrsIwX8r\niyKv6ktY03/Mud8xmcLxH9dwxDwZJW/r7xBBDhRrQvPz5U2gsSAAouvm43Eb\nL2N1nzZ6fZ3bu9P287JYBa4+Gl6rCYOq0zucDkv0vTP7vqHhRIg6vJZu3BPs\nSa2SpbG0vHD9jydY+NCjMnXw1CLsuxlIidCbSvN9w1OzwAK+4/KhTvHJNdBY\nHXkbK4XuWN3nu5vImaG8jMVcKylimQJW47yT33nWvtbPh2/Ad5NmkJ/ilP8v\n1WHx\r\n=CCFp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5PRHCav5yuUecNhyNuuup+CHnuQHg/V79SR0ELYChQAiEA0/gvZFuknGFmseLm7mhKD1Mnp2nu7xyJQ4ZwA55Zrgs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.7.7_1589494510368_0.2466597555639547"},"_hasShrinkwrap":false},"6.8.0-test.1589797217341":{"name":"ts-toolbelt","version":"6.8.0-test.1589797217341","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"df920381422f4298ce90303b2682ecd78814e540","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h3 align=\"center\">👷 Higher Type Safety for TypeScript</h3>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** and **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +150MB)\n* Computed types are always **readable**, just like if you typed it\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.0-test.1589797217341","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-zfy4DkosS7rGEf58uvkGrWBRdcx/Pj1ibeVJJiPKV+hdMNHWMPNr8NmJ/9UOA50V4iHMzXWJLdlGJmG4Fb2nfg==","shasum":"80f5d0de9da385d1f6452d22c16579362f218e81","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.0-test.1589797217341.tgz","fileCount":6,"unpackedSize":416646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewmF3CRA9TVsSAnZWagAAppoP/29RI5CEJJlqqJ9WNL9e\nuPXwoT7992k3SaNxUNjFNvHwZYr4uLY0TcXzen7buQeTP610+FEv3b+rXH0O\nN9sUpgnqdSS6Q+Zih5vE/gy/aQPd0JxWI9u9qsU7aMrH/hKbPC9RiBJzkLP+\nFPUd6E+GzAV+y9MmCoHSd/EmeBV5MscbhYwqLebp6WHUGb9RETvsQZsCRkYv\nLoKB1u3q+k605sOwLIfQ5wBxr0KzCqfClcB7Ic8Cx7O+7sfOQcsU0w7Z8255\n4Z2tSNzH9ZqHruDjS1CZFdHlOlNHPdcmW03EswvPVOkvso5UORE8hQ/h1Po8\nrJyR+zlKdLLg4hqVReVoqD6hQU3sLXdN3sc5VB1e/XJrw5w0NhnsW6phmrcZ\nHhoxnJMqKhRzQQWQ0QgqILQ7OL98tixzR2u3TQXFBzInAhSUUDVkwAXo818w\nfiTE8DjbpNz1Mv/jEd7rmkFdTDDZUEkjwvmNK4+b+1onQiWiN7tNrY2lPZkD\nYKFnnhNDz7iaudUtyLABvnnwuTrVaVqdF1fMUAYuzSsknavwIFM5DR5Hj1c2\nEANnnVODOpPkfUY/23C11R5OZCDg+oPOgjmpdigJPvo3SGDLwYGL6JOP4VWs\nt20OTE25fhbC8UjZ9MxyfO/8x13p+AZTw+ukFN/iE5pxdDozMB6jz727+r9Z\nXbEq\r\n=jJQd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9gqLmz57czTxiCm0+ZxBEK19IB5akl8SkUn/epvvaGQIhAMQb9k3K0jdpF3m9whDnO5bXXh6XDeyqR/HlBr9s0I9O"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.0-test.1589797217341_1589797239070_0.4298750861833087"},"_hasShrinkwrap":false},"6.8.0":{"name":"ts-toolbelt","version":"6.8.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"df920381422f4298ce90303b2682ecd78814e540","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-HidhVaj33+ZubzrVb1Y9rSul6SrtcZHbIWmcgR2x58pV/OIItZcimruUYeSkToMgeURdMhDTjZjM0rcYxKbrdQ==","shasum":"e1be47975abd149956ea39e5160eec9f142db7e6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.0.tgz","fileCount":6,"unpackedSize":416627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewmKzCRA9TVsSAnZWagAAJQsP/0/IzqBbfOhZxqlepRds\nS9RWYp8qGQZAlHqdAulDROsCKxuhjTEWK04jisaUELrCE4hDZwOcXm2B8zwc\n0lRGZWbYc3MofTQOuFL5pixFbJc93rW90COFMgrMkoFKr5tcUzL1MyL129Dj\ncGER2B8D0Y7RTnmiaQ99V8LKm0+vSh2p6QiZcVr7XodhmXafqq4B0i/zeICz\nbOvLu6JYFghknt9ZIyfJCJuZZ64/q4J/oeDPELUYhlotd/9aMVDgmCEYwQnK\nIxmO5TISl2pM9C9qkaf83kkCMqaAMRWanLMGcUVb4PAUwzHVSZ1hPL01rHGs\nOHX9ARWWCx7HvMDrH4p5R7Y60iXfZ0701XQAlqHs00hNXUK+BWXquIaRdRyl\n+g2NW5f6GqE4gJjcVppNI0qFDqcyinf2bqZzCyzzyxJEnMHkZJUvVfZmrZfj\n2V+TWkmvnCsLutoU1E14NiMXPtR+zyZEfCtGrB9sC8+7r6SIR7eW24QyFiN8\nvW8xh9ld0W5oJSZvdsmTsGBsOihKJzAJIa6sBWC9HBJF6GLVUyL+vvNAfPro\nPJULcUNukUXeqpzQhqophwKO/SN2jcQcvX/4iwUhTkWlsZ5XcZw5zoYtxYMV\nRCgKaYPaQlGlzUn66rflETg5AooTZ6QoU7JhGRDX8TwOVigpKDA4937iglNa\nvsMG\r\n=eybM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBYYjIJxIHmmr/bdgTZHkuiHPabJDqMt30phhoVzRO1wIhAN9A/t1KYlOgcvCXkjLO7U7R+EIYfvc2Q1H572LEt2OH"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.0_1589797555298_0.4350722132564633"},"_hasShrinkwrap":false},"6.8.1-test.1589831477687":{"name":"ts-toolbelt","version":"6.8.1-test.1589831477687","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"33ff89314542b171ba15432bb50c2c857b428d8e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>If your goal is to avoid bugs by writing quality types, this library is made for you.</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types.\n\nWith its programmatic API, you can write type-safe software more **easily** and in **less time** than you do today.\n\nIt brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a lodash-like **programmatic API** for the type system\n* Promote type **evolution** and **reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* High [**performance**](https://gist.github.com/pirix-gh/02097996d2a1e4e7aa2d54b330451ea0), so it will not bloat TS (~ +2sec, +150MB)\n* Computed types are always **readable**, just like if you typed it\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.1-test.1589831477687","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-5zJwvt6SzxlRKh3Rue8jX0iviuC6wwGlC6uEPxzOPPbs9puK/l8F8noRnsQ85JyZPo6X9xC5ot6o6VNKUT3YiQ==","shasum":"5485a0f4be3e8aea8d4cdba49e1149cedff711a0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.1-test.1589831477687.tgz","fileCount":6,"unpackedSize":416906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewudMCRA9TVsSAnZWagAAVgwQAJQRghUNBxJXZSnyTTsT\nCXZBoetHY3AMeyFT4USpNGw9LoXTEfcikhVvJ1dwI3XUpevA/t7MIvgnj9Jb\nuqh7ZtV6jI6eb+aslrQOhLRSTA57rA+5JzHrB3mgbn3lkP0o8XxLJCJgfP8E\nsdc3H1ci6zzw/KVDkCxdpBBfGpnB0BwIorQRkdAhgan7BwZcI9GwIM62cKh/\nKul/op2zmxLGhPCQ2cMLEBO1JRs56pf32sEY+kBJH3fEGFYNrXFNavVT/uV3\nxubDe8qGGovPYAUOnOazOozxHKaArvjFpl7mIHlBhLhWR1mUx08k1Ii1yMaH\nuqC+tpR7505T9RDa37z9YZLw36p9G/BarZsERYw5MdrQ5AGgMfYYZf9JAF09\noqV4PqHi0Hrc22wDIJKpekimc/VXNGkA/5GU0ZaHLv0rE3c8jeUTC5M9vdgA\n+3hAsF6KRyI0bfaHzE9CChuzEzsDGegnt4nIam1K5QgBr8z0g/PnGF+S25yc\nXq1PZClZIekzUoW1TJKkop/qsm6a32hOvh6/zeZ04c7sxlfX4YaiTUrDzaQr\nje8arbVASvfbyx+kpsJBRe83BK+y3KyIGq0OQJfibMXrrVd4fB4eydg1GCwC\ni8b6luWHp0wNV6+TEmozy/xSKdfkunB2TpsrAml1I0ELwtibZ8BJxmIPzw6B\nHyi+\r\n=Ul/L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIArZxm6PYDd0r6qFjCMrlORF81KvdTZpm8OvkJKulX8+AiEAkAqcIup37cYfpHjwpZyus6jfc/5/9PH9dvhX04FDRYg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.1-test.1589831477687_1589831500061_0.3238359221544638"},"_hasShrinkwrap":false},"6.8.1":{"name":"ts-toolbelt","version":"6.8.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"33ff89314542b171ba15432bb50c2c857b428d8e","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-tUFrZAWIn670vXDFhIiq/2HelJf8wztaExYOcZXFY3tA65sjpTlA4V+0E2BCInTKFP4IEki+Jofha5x3zx51+Q==","shasum":"097245593cc56b0371c1763956addb48a697f26e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.1.tgz","fileCount":6,"unpackedSize":416887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewuiKCRA9TVsSAnZWagAA5vMP/RsMpJC+XfTpw4YAisVc\nDQhm0T4xWXyS/Ax5Cdfi7NDPYCP28wSRn/K5whRdStC95LecVarmnLnr3DqU\nuJ+ej63fQ1NRvakD3Cf14TO0YZO5nsBECJgL2FjUddRZo3OU79LRokpKZb1W\nsMqSVhY36AiL+HuE46DAMpEotOwm4G1ZdXUjUHllqfgJOi10GPO1z1NhZVbF\nB+HZp6npBmxq4cT73epkt0a5eijlA/V4+Ye40e4pKZrl0eAXLqgvM4jGhiwz\nMraKrvqmMwr6FoNvkLF34O5cRHptiuVg8dX/LldszQ2aIqa2GDZQR95FPMsZ\nXDsHVOMB6uTG/p0faI+r2i8NXdGsxzBvCFpp175wRI+v6jviu7C+BTL8yU5e\nBvIzDEdk2TbPV/rPvxO1yRHx3FZW46ObCI5RVliyNfQNDLDhzpP0Gp2F8bEB\n/MaqnxwW9WRDdd3CkHkZOiyXRyP6QhSXEBmV05MZUcjvDxFCX5gSqkwDGOAw\nZtNMTVx2YLAnOBfYMBxbRyd1MGtwKNfyEV3Z0krrfevH35/gzbAJe/7XYNQE\nP+1YruQNcGyz1p1YfUcM1g7OK/TI6sjYf/Mn9SXFODPz41V9O4dDaCCwYPR+\naHCowJIpeqn1vSgvZ8hS8+pMbKfozyHYIabPj7H6CqyYDbGtSgi/8Ijhlx62\nhIq2\r\n=RDHQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9vwqFAzGecLvXM5sVK1XC0ieHRNBcpD3NjTun7Ll4yAIhAMp/N9h9EUCl1ZNEVnOqBP8rRgwwjZaVPPFOvNWzpbwe"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.1_1589831818373_0.004220045993911015"},"_hasShrinkwrap":false},"6.8.2-test.1589833047836":{"name":"ts-toolbelt","version":"6.8.2-test.1589833047836","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"8fbac061bfcc66e6220ae4a391a0522305c959b3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.2-test.1589833047836","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-4aAYR+ZwVjN/AXBq8TAxbGOBt6QaMoBgKb+GD9uh56FrUmRE8kUl+37Z+cIdDLtevMDBFDc1lyYEMKD8Ts9/mA==","shasum":"abaac4b755ea3b52a2d51e2a617c3106d9910e2e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.2-test.1589833047836.tgz","fileCount":6,"unpackedSize":416971,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewu1wCRA9TVsSAnZWagAAMfQP/1Je01ipA7fc9YWoF/j2\n4SGCc0I1EEjWbU6dZ9ij/dT6j0FVgIAmv83rvhAImtNJJ3ILysjt/rX4ICBy\nNNOBrFMQESjXXS/8yDwwC08qkVQBYLOY8mmDxokIOyjWyVr1CFSxW0Emx+CS\nUu375L+OXXFn8wwnh++lFvqQcPQy9HdTleQ2CxeFUKX+gp+CalRRto+NJxCX\nI75bdycwsZYLZ565a/sJg2cd60FCdecZhO3xrEQtezPsWPDGJENT6cnoWv0g\nb2ebfD7KeMjKHAAfP+jQ70yfHWgp286/bsbgF+Q5C18glgFdXzQSLm0RktoF\nC7sKzuV1/vZ2snW4fzWrm7wMOwaCDfBSIvJtGSIQgwwCBBc9lF+J64Fw9ZUI\nKWYiwGufGZhc6q7mBta0QdN3rzArfinCOMI7m8FWrbUpGGG8rw2dxUNpdK1/\nVIJVLKZIA7IeF1/unwbnuUlsf/FYFCEzISIPI6SP+ZeaGNbBd6cHFXme6JQh\nn2JJJ6ovqo9J5SzrBdukqbQWpfuVsMcJH5KlNu5Ac/LO6z3alxQyGA3cXaTe\nGGRth9W5fZ3lcdz9e5cUHGboYtR5whA2N93M4NR8XG+0TEa6BUs9oP2zP6Oi\n1eN3jIFPWgFGeMCx6Uw6Stp6fYBWnzgndBoXITyTbZ6tkqABFy6JmChkMIIh\ngZfV\r\n=wArp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxCU9pwWY/QjS1sPhZV/q7APNGRksaQMmqQOWFtfo+IAiEAlAtXc/y94AHZpVbI2UdLLIW+euI5MjVlrDVjWVtGpkU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.2-test.1589833047836_1589833071531_0.729122864604584"},"_hasShrinkwrap":false},"6.8.2":{"name":"ts-toolbelt","version":"6.8.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"8fbac061bfcc66e6220ae4a391a0522305c959b3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-EWy4wbL/bB92psrJIYdhUthP/LhKybqdjrJujFeNRsiqjnIoEt97ZGq68kIkdss0mBCMurVgexwf2TyhgHW11A==","shasum":"67b8e90504b4eb417b35391f7e661aaea1bdd936","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.2.tgz","fileCount":6,"unpackedSize":416952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewu6zCRA9TVsSAnZWagAAKG0QAJkGf4K2EuFMXGkIpbyZ\n8gEmduGTq3y6sdgsR3VM6MDy/9Unrrb5Uovgc6H/SsvnYJ4GDV50Ohvys/hr\nJiT0RG/2xtNGRcwSJo8tN9Wb6WdyE87ujTaDoz/gC2nj8MK6h4ePZhV4vuyo\nvuuYboIHa7mb8d0Z1Ze9UIlw3e8tVVtNrQZ7HkIUFbDWM5eo2PjEC2Gw2nuP\neG876GIAcDTX+o2CUKwtuwUBDAYXcr4ra00IQvnEOyRn6Y/CprHsNLC3RD9C\nUR2crXyay82DtefUWWDI3V0d59l36WjfteUMvyDS3Jy8sVxP1SKk/Xrq1mJi\naJZkkv10m4k4OqW3udYDVwKiNgpilPm5xXDgD5yF75fz56mvChiGBcWCxD3W\nqpvCM+jtJ9u/Ten83NxzLpHcHhe9tsNXxBQ5xOzQSk1X7cHBAxwij0nBjk+e\n7r6ajyNy60iAol7AlMzVjnFN/bAb4l6c6Rlgh1koBYCoEONCEjdvEzvk6QAE\nz0VrwhYPIm22l3SPMwbuDyqhJGOjqb7r0vRWRGxp1BWQuqZ8hBbPH4iOIMtS\nKoqs+lRx8YFFmO41wBF+Gxsa27Ao+qOWA0bIymxV/AlVsAloUyK4tAGp1/mr\nFuH3umXogPeqfg1diAjvXImsYfD1ZyJitISlsQTTwA+leUCeBJ7A8/Udyupf\n1Orq\r\n=2sVZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtdQuEDTca9NzWOFjXXsds3EtPa3rAoMVajHTDPKhYawIgG1rDlxzD4Rj3y3+BUxK8VvlQX4bkTmjBQrF1GoC0Wqs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.2_1589833394599_0.9632327095573783"},"_hasShrinkwrap":false},"6.8.4-test.1589836928515":{"name":"ts-toolbelt","version":"6.8.4-test.1589836928515","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"2778417c42c024ff8811f279e84af45309019bf4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.4-test.1589836928515","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ExZKjenU6nsB5FMMCP4eQZQvHa5GNH3rqOhMYUL52EpJufk5RjeS7usNlN0542FlZZhWrq56TCQpm9NP21b4xA==","shasum":"cb6575c09e2c2442648181aa1b49d8d2945a9fe0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.4-test.1589836928515.tgz","fileCount":6,"unpackedSize":420830,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewvyXCRA9TVsSAnZWagAA/9EP/i7gwDU0iWDFFn2gDI65\nGOaxLpmEDqOHfX5eS9XebGpI1S/9MhpN2WldElpLaNAAbzO6CUXB+XP+IccS\nODy8a+KOadn1cfXi+zPcysghRI5hiNZoKljlyVjMNBbe7RSIoR9YZufP0Flc\nJ95OME75MbReJRzQKzcZ02AlJmLAzwOo7xHp9IwQfPMtszHP2nFT95zZKAfc\n4x+XvKi6++ooVApvEO+DzSwPQUdvhtNCE75DmBejQb4IloPZlI8une6yHJA+\n92Ky+sBaHfY07Y0biruPE/xdmyMnn+M+bPnniFMz68cj99QQY2Q4Tzf3DA7G\nxd/doDyDPimGuSnzWybw0aVBWVAjBEqsv5hmTsNHiAkePlAtyrNczCQmkJ6N\n6MyzQjfblbrJs2G7v+QWQemsE2Mj2uPduso7fjx3m9hThbtTPqCeDCh3vVXC\nJ4Mg6iPXB6EgHhGdUQbiLW26M2lhv0HuDhpE35RgQjk9Hf/tJ/SEuUeTJjaa\nkHXkwMR1fWM7N3K3jlAlLSx0Aa0jfNZJqjVDvQ/PLltoTTarcSdQXYoJ4LB6\nbmsoIfRkYWkGyuM6zPX9mrLz0smp5CUSyZm/D8+z0SvA9IijYc3+YYHxtf2L\n7QLj0bCmCYsjgquxvuXQd+16+bromOpZIPulN2YmlF6flQRaQmz6AYgOTlRM\nag95\r\n=UMtN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC85+S6qjH9GYNi9FMUU7lc0BdBCz6XLFb3QmiKV+naSAiEA/BdBi65b32xfjhFNDCObbrgDD3s8C6DhzTBs1RLN5wI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.4-test.1589836928515_1589836951380_0.7082962078744337"},"_hasShrinkwrap":false},"6.8.4":{"name":"ts-toolbelt","version":"6.8.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"2778417c42c024ff8811f279e84af45309019bf4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.4","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-OgJPX0YOlhPD5fdFIoS50ZCWXDlmwBYbkXnlTs+TxOfsVzCvr+HoANzLLcTDLF9hkHO56DxtBTCm6XDPm7YEow==","shasum":"6c4d4d53a3237caa1ddcd7e50c1c00e8e8d96861","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.4.tgz","fileCount":6,"unpackedSize":420811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewv3aCRA9TVsSAnZWagAAPaIP+gJvemKDgAbVugxTtXCY\npyQ82PDDSTIw2NIfspZbA2zdSHnbb2cw3UgyVHLPvWa+6K8gBttE/fgVhlov\nTaw5iUm9U4J9InL7q3Aw7mtCUTtP6kD/UdJKN18iKXM0ZVpImaPp1hXZekV6\nYouGJtNjHd/xKaQTN8aqoLfnldHFLnTC0+5ZwV8Jwn9gXlgBVj2Ew++YIh0t\ngI07QjXtBOCFWHDkl1bvPF9BwulzZS01vvMwUp5JcRqocQ1RXsBoLpvxNOTC\nKcp2mdyw2ZmIdkPd115KB95GqVdfEhtzkxgLTgSelj/rr3lxI01HyHwIxfIy\nB0D3BughmIq4DaxBxicNOVfggeD71AJgREq66jQvRLerp/ewswL8yclym9wT\ndwtFUzuxurRmYoyZlj0l8EtB74ISncsZdHCYdY85sOcgwTIKdFs4P0xez6k4\n6HLez3a1ymrzUMZ3PvfLhXJ4pUl4Teadij61Hj891Qke1lxfYe1eLSPOOn/k\nvxGi6DdYbhGlPA1jP2iaxH3DHMN6A9i47ZrOCYBFHG3wPhNpSxoqCyCL+KyD\n/gPNzqHzuzSHsRUb7DUWftXjDY3tfGt6Uv3CnEGuKAflFBSIZi/tP8lxnxFT\nYRf0vdJcK6vfQGKmghdKM1Si2Dq1i3h34pLd4ILWJM4BfCBq0+03b7vd2hX9\nzZ+m\r\n=vSs4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDThZ2WXqjAQY1P9vhPesk0WM4REjVi3EA5Jk72Xw4tUwIhANwBuJXJVq6YzElgu954LaP3oMacJDy6+QGNH+JYYcqH"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.4_1589837273726_0.9092523411075979"},"_hasShrinkwrap":false},"6.8.5-test.1589890132231":{"name":"ts-toolbelt","version":"6.8.5-test.1589890132231","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"41605e3de909525cbed868e89799dba7255f4422","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.png\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.png\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.5-test.1589890132231","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-Rqb1ZyevcRYP7IK5FjnFLuBBqpEPkSoo567QOBTz14LJs0nnvmXZe2GVE1O5LCdBzTJ7XT0FpaqhzgndVJJMHg==","shasum":"39fcabb6d293e7c4918e94bf69ab9e339fbfbc90","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.5-test.1589890132231.tgz","fileCount":6,"unpackedSize":421351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew8xsCRA9TVsSAnZWagAAcDcQAIT4l6WKXyObof6dlzh9\nFbASyE0ykdkhlwAoWoBhiN32Zh8abdwHwtAK2izCLsT/uKZuyDbkgTQjFbiD\nXx5jvs483BuMAdq3HasMNQjupAFsc0c7wCQrESJbOvfoqyYn2hPYkAG2ivBY\n/rk+EDzH0ONV4dxojXI6GVM3mXl5LYHxlQyXGtna8j5ORxL88F6NJogflES2\n7nMa2vFSgvbxPAJvIfyHTIDeHJfE05yTMvDV1+eemEBGRy8mC8YW4JUYeGMF\nQz36PqMAwO16uQo7C4BCPZzoO4KWi6bBCKnqxdjEP5/McYvZNrvQ2RqloeAJ\nyglZ9kfCK81EUujyfAARWlgVI2eHlceOcMV75csH5qmKSx7cN//cBSulVOmz\nsvdE8mmhS4eAbZ71EJu3O2uJXz6f10D3rgMtSz6hcrcD+XQVIvMRN6/Lo1bA\nkZUVwx6APRU1vfW+MPTUgCe3RDzRNAo5o0urV2boZysou1f5aech+fXL49cU\nene6B5jO8NllVPB0ae44qiK8R57dCO15Y+JOHVJIZMHUCH1HQ/eM8m2hWuoA\nIjetrC2ku06XPS+sIuAcT0ez/4OkOoQWVQSU1svT+r0tix38kmnKZaKHe4kV\nunbzekkWp45qcSfHSYI+AsRXcyG1G/E8ddXQifjMmO05Xa3IFSn0WQhyif+n\n7MiU\r\n=pT/W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIANLfx6dJ5UASH2iB1HqWqZavaGvxIKSqAtGo/ZKeY2hAiAgTnuLcgyyWHWPHire0mvYPs3twogjPfeKy2SQGXWo3g=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.5-test.1589890132231_1589890155867_0.8412568702493386"},"_hasShrinkwrap":false},"6.8.5":{"name":"ts-toolbelt","version":"6.8.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"41605e3de909525cbed868e89799dba7255f4422","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.5","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-0uqJ/8EJ+r5ryOl1cWX4xXnUyG7vA9Vde4cq1+VWhqnl2k9vbasQoKfWWAcIY2Ni83tFnK4na4CZLFR9kUhgYg==","shasum":"c40177aea14edb35daa0b6df3298069d774b195a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.5.tgz","fileCount":6,"unpackedSize":421332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew82rCRA9TVsSAnZWagAA2kQP/RtfJMo4nj60ZuGqf+u9\n5hinho36IqY5VseIjOPVQ8FDdH0SCMr6w4QZqEeCgIeWM1+SeatBfGtEtMvx\nfY/p0IwmfL17j68Ae9qCnFoeqYD0+L2kYx/0CcZy/MxCVjJz4l6aTavK1oan\nDaKasoE4DvS4aVvVgahkh1TNXg/CCJSl1U/2s7Q+NtdVsLpsIekvcW07WBvk\nBkfk7/BJx2W1wDCpG9TY80CaxiNhls0FxOGv7XLFb6zw8/HZz3fpPcahxqsT\nUCh2vwXxKSgUt5UnVQTUp0Qq/TZzh+MDcffAyGhlrqZ33Nj1WIoNPzEJLKQ1\nN01shhLXLx669YlZMuQYxxIh5WHqP+q81QwtN6GGkjcqKnwOppJ/nc7yni+z\nWDEKRzkT2FDj5novBvf9i687CpoUFJXgdB0f1/nsrO6tBgFhNpmtY/bpWuU+\nhF+sYieshIBkyqKLnaqXmiVONulbkqGLUjdNgABNQpe1+bGneVQ6LXI4svLY\nPKhMQojgiA04HxSEMd1x+vGhP8aGyjtCn6mPqXTXclAgLIGjcrEKIK7tiPWY\nJg1xyCHj9oDYFSm7Ixh/P32pdKe3zl4MvZ5xSTXsHJEIX+Xsgdqv0lZ/Q2oO\nuXDCIMcOilTMe5xPhQyPeMb1uCZORlCXq9+t04MUNobedw2KOy2A7JYb+NHw\nJU2i\r\n=6tl1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzHF+EoYogE2WB+w058ekgMGMPWJ8fMhtgXeQs049e2AIgWI15IkRZaS/CZMDaAwxN0vzVHgRxD8CPVOQwXtxHNPs="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.5_1589890474916_0.9942587937027749"},"_hasShrinkwrap":false},"6.8.6-test.1589923290882":{"name":"ts-toolbelt","version":"6.8.6-test.1589923290882","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"476c9e9baf6cec56a1b37c94835c2b77f15c128d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.6-test.1589923290882","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-8jX1pf9r4exz/1kQZppLkOrTeC2Xu+CI68EcO6jlMHlRcaikm6dtXxMhzi8Wk7zC4m8zlpz8kmleYDF6J0xjeA==","shasum":"c0dd68b23ccd235942e1e8e27795406ab41fa73e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.6-test.1589923290882.tgz","fileCount":6,"unpackedSize":421768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexE31CRA9TVsSAnZWagAAQDEQAIkSZimIsHNGPxwo7M67\nd4c5btZstLFNKaIJZi/s5dWqmkcn++oZnI2xYFSb+a7xvuC5fFt7Slw7sZyL\nRHByH7To9Ki1RYcepYp88hVfQ/F0MKbAvT5iRpODa1uq1fIuFMmsO5xriK1F\nzLVXL0tLsckprAFuw4KUs5J4Xjw1fWhp2xIIXgT4Bu7dOavIwQUY/OWhKvMF\nscfBm2+G8uLjau9CmlZrhGdTUv7l9NGLwzhW5p+9JaYYLcrGZGG/r9ZpqHkt\nWpkn2qyASYt0slx2VApsAbudlhgyBHm96ARTtHMChP+TGkL/co2zQOO6qLUO\nrygNdUIFbyYrDGCxBID1IYaNxOUMAloIWrPPNtWoWgaor+sQrttedCAL/JWc\nrIwIsbkRLlNv7s9+A6nJepPG5Q0EgVFKmRYTIIpHFyga0ssOYkRnKAzHfmUb\nsVdSYRAKW/D9a091T4XQMbYVbkij0w3W/t0sfb+ZUoEtVXU8WtOuSc3y4F4Y\njVFE4N7uHnf7zlA//uLyOt/AsfAHvXjD+Y0TeGiATfmtfv6v5kZMK8ckKPhO\nNgU36XSel4ro8JGfHTJHZ9cgs4bqm3SLqiZVmMLlPiK6561b4ZqNOk98SC1f\n+UgKZ2gSKSepfFiIX4+z5E9vT+R9RIfGULaYLJQRlvxFKWOCKNWCLvPANUbw\n6bJK\r\n=bcea\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAj0+yBwPkBm6l5cbItYwL71WE20eZ1NgivSdISMpd2QAiA+lp798oZHUzJ0N2oFKURhdhHUGnR7g1I+mhRvuaTY5Q=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.6-test.1589923290882_1589923316661_0.5020812601578257"},"_hasShrinkwrap":false},"6.8.6":{"name":"ts-toolbelt","version":"6.8.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"476c9e9baf6cec56a1b37c94835c2b77f15c128d","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.6","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-WYsBU9Kp+P97Iuy5+ZQZzoXLkCMdcBw71sxWu05L7YDbZJYycfrsoUDCqGcf7AynjhayT+CGaiViKC0eFOcdYQ==","shasum":"3972948ae8f03636ede959d8b4c3a4001ce8b56a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.6.tgz","fileCount":6,"unpackedSize":421749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexE9ACRA9TVsSAnZWagAAGcwP/3dB74vM4RbFXNjanPWY\nuf98QyXvtkBu14YtcunRsPrGFkPGR8DninrkVfevQhLkLeYl4oSqdKHRjnuV\nlPN9EdAhdiDhIzb9n7PvIA9hifTBbHjd57aWl6MFoflsvqCNJKtAmrowZUc3\nWh8DGPkQzJtSKtf4n+eZANTBqBvZMcBo/B7S3c94RPJMOHKX/WzdPKr8io/8\nHORSxTchaxIhXsY7kyyq+TK9DFL27QtqIreariy3JyOkAnyFwAyWSzL2aW2a\nM4MLS5GkUctvCFEZCnkZ93Vkj8Qo8AqCw9uNH2zkvs8IohrPtE1iO0Ls+pm4\n56767E8Hzbb71BYZxXgMui4E0uROY/g3epyqPouSfr4r+UJWGf4TV8YHDxiy\n1aJqcXFRxj/bMCAHZUCXhV/FFZPCRnuSXTA/qDO+qFB7p5QZ/ih0mPWzmZXH\nZKGtqVlTGWvEk/l/kHCQZAO9xPng5/S9Zw49NMqmn0VHyBpfD+tPMJtNfR6h\n1Y50L2+4hs/KuGNHlyONxxSXRpjczL184ozC2T1adBkQUZE/5JcYJbnBfR6n\nFImgP//FvjxK180JmyKBOal3U6Z5ph1Mk3Wdatx0lgtRxFIEXsPudGqRFCEP\n/ozTE1Aw0DEVsgMYfygqrdtdEt90FpiQ6n46ibYqYcVdMoYkLWwlJ52XfSCz\nSnUY\r\n=1S/g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDh0mLyTxXUU6KZRvSq5sUCQQQiZk2KodWT4+98fcrLsAIgfS6sj4HHEGp+KkUlS8gznGipK7gss/3jHfLGghaktyU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.6_1589923648148_0.5417271414045361"},"_hasShrinkwrap":false},"6.8.7-test.1589924198747":{"name":"ts-toolbelt","version":"6.8.7-test.1589924198747","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3f26a0e05efa60d3f9216d9680afe66d098f3ec3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"25px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"25px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.7-test.1589924198747","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-tYAbkzl7utSHiPYn8oWEx8NV9E1GfdG6GBu49FA+w1KMNSNeK8T+U4+yq8dp9lilz7Qwl/bryjcExV4qkyDVUQ==","shasum":"1eecea1b932e83438bce7267a4684492eacfc6d5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.7-test.1589924198747.tgz","fileCount":6,"unpackedSize":421983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexFF9CRA9TVsSAnZWagAAm30P/1T/dz4E/kFDgy1im42w\ni5XNc9aWPeSBoxQnz8RPaebIg8XYI8XbgmEQGUkOW3pVHVHNAw9km6DVADA1\nv8yEEE3rjsrk+kfZUFmVJBvf1D+3ociFcqWYGcw2GWw68vKie0MGq2XmGXH+\nmWp0lxcp/iWTO+HSRrdC5ndqJeIlb4kGbiU1OzOqobyhvSgPROOAUumnw4nG\nOjqbwFdsvOHAR+wHqkSZsOWIAlCuxbHct334qZHcPZ3UpWRUKOEyRO9d0GJn\n6e9khyez+CbPCi6lDfrnbgfWZNRZPC00mXjS0lIzkaZIr+s+QbQRTWMiXeJc\nZgyMZNfgBja6FkciFiTr+MqQK/6T5aQ6SLrRycbj1faV6xVHYe3bl/llZ0F0\njBUV9iUyV+SIsRyqw1FWSL60RjkoT6CioN7VDwyEx7J/oNKcP4AMNfE3yD8a\nv6DbR295lir0wqyzud/QfHckOKgm50bzfjQ31XxhxV8NvH9sSqX05jQ+qcSC\nLIZ8uoXXMrQ3HAKRdkOaeTOfO1R/LSwCfElLURydUBGfx3LzrfnHCYT7wYas\nx8VTtx2PpLsJfsVtGHqaoYbc/6jCkEaiTnuQ//9EkGZkNTpTIRw2o9ODP4ta\nPf7+CzCwFfR4LiR1NFIXdUQhy2AsSJvUrh0kIEOlzinHfOl0lj5RRQst4ahI\nBB81\r\n=1xsH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPr5S5MPcbgGAiGaD3QBrD+bjzClcm8p6YJmwOm5bnxAiEAjJd0KM4IZLKcQdKZiOrli2K8jTVR8tFcrAjA66iCFJM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.7-test.1589924198747_1589924220907_0.9896901287072726"},"_hasShrinkwrap":false},"6.8.8-test.1589924321578":{"name":"ts-toolbelt","version":"6.8.8-test.1589924321578","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"08e349e170c977cfdef102b502e644a5915736ad","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.8-test.1589924321578","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-LBQweBvs+Y0v44/6TJAWVzE0Lwj6OhhHQJcrLg05SVDDjOUgL/xjMqw7lBEOcjf2E6Bb/U7CYoUfR7CLJKF5hA==","shasum":"0a2e68d85bf65a676d054ce9c34bd95d6d35c900","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.8-test.1589924321578.tgz","fileCount":6,"unpackedSize":422301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexFH3CRA9TVsSAnZWagAAQuoP/iWA7Cp7pa2G7VylIDhT\nA9csfbsqCUEzWNtiCRLBYU0XAvXumPspKUCMPBHhPlSpqLpjD6YtIm/u+cff\nOBt6sxXDn9qxYKC+Vg3tsuZ/Q0bf4NTCGtVcxabDnFGdF62Vmr/8MFbNM29y\n6Omo7Ao2XdQpBrucRFE+LhF2IGap94R9W+XuS15tQSNPAnkkgDaQOlnUjjiZ\nQaxa8m2XAlwzEQZ8sFIgKMVkdDtwF5N8wDt9AmGY9yuJ+CDKCknijvszbILf\nZGGkquqSizjQS2FSWzgM8HcuCbS5pUoWUdS1ZrT8stPAvwrSz0D9DsPyx7ED\nurjfCHzMfm1G8gvZa1dbnagdmlvoix7zTmSkyZeOI4EIuk0ZQfh/0/yL1IDX\nHGoi7T6Rc89wM7ZRnvW5A18BvkKXmKVGOPsbySBeta3EeGJJorJVoQbsuVXE\nk1E71dJB6K7bTWmuXQ6OPJI/R+CyQNmfyyMRqGpYP6c8tXNZln3JU8iPCZgb\nch5ixevcA/9yi0cuzGKc06lI97WCCTRN4vi6sqBv0fsg8H2QQU4dh0HPr2z2\nVxZ0E507KS5aGLUsvFdr8yBrjKhaWvn8p7M+Gtwr8pUeBE6/cmNPShUVh/7D\nvnfHbuul+9k3trzE9Ca1s7j7aRiJqxeo+JvP7iH6I49qhudu98M7njEf47JP\nFP6a\r\n=RyJS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgCgKe00PlcjnQLEmxNQTuTPSAVQJ88p+Hd/g7CMJefQIgbVdKJSJK0KISwH5zAhRftFZRWJ7OhXSCLmYEZj1atZk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.8-test.1589924321578_1589924343202_0.9349095796641047"},"_hasShrinkwrap":false},"6.8.7":{"name":"ts-toolbelt","version":"6.8.7","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"3f26a0e05efa60d3f9216d9680afe66d098f3ec3","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.7","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-1+Hs6PtdzmaE68rM8taXUm6NDVwV/sFswP7GShFfh+bxMd7HkuB57hjDK3akBK3lavApOayt4RcpZskojsXecg==","shasum":"180438cc266877839a9878d932192f172e648d9f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.7.tgz","fileCount":6,"unpackedSize":421964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexFK4CRA9TVsSAnZWagAAjGgQAIZ5k92pBjDzcMi36ceD\nuS0z7gT8iJvuS+wCDy8/85H5ubzH12MCDyDDoHu4ebnnt50Sf1B7cJhG0kZl\nV4I3dB7lAYefZDLKv0SC0qXoi6r7GYdjSw5vfyxni31iS+NvcCcAM5XpQBiv\nP6P0JCZgl9eGLa49ZD0AsOd2VrlaqUy9uGv4yFtvVDeh7cjytzmrzetGCVxt\ndDOJtu8OsWK2ZTsxYH5ezufQAvO6sRkNLPFBqb0Fq0xemyLQiVgWa5OsrijV\nFaKlgpDBPtswG/9yEWb6DNd6i/ARalLo9YNy+cFmevPIoBRDpCyn9HxNu3rO\ns57vitnAxwj05Cy4esOca0IES1T09355Y2TSVs6tqVb8NxrPkLOAtQx6/sF7\n5TMAP1de5dI5TFQHA8LLo4lV4+LD35GYR9T5DKcRzaNZUWjRCu3L8Ye4MEem\ngHdIhKGVK5W9eFMnADodVgRP9ZASUJcvanmbgQf3MmVInwVVx/eTXJ5IIfKu\n7uWyXqsr5tImzuUgtTnoEj3D93n5EJ6TY/wxhPCj6GNUCKEEZtge2U+mvqpR\nXayVrj09wk7G4Y21M4BEld7fozD1u0OOnXyKZikNgjjxIwR7h0xfURtuzRPC\nIOPGQZO9I18Jd5PN2q295sDRzNEybrh5r2iOkaUuqpEUJHKHIuMiiCYrhSZ/\nCP6W\r\n=mmdu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC26uKIGQcKn8o16rCCui2SeaaF5f1eE24gInAgqzIviAiAYZH6BSbMtjEJaOZfdXy8ONf6xlVDr6IH4IsGkelOjEA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.7_1589924535774_0.7903552358569295"},"_hasShrinkwrap":false},"6.8.8":{"name":"ts-toolbelt","version":"6.8.8","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"08e349e170c977cfdef102b502e644a5915736ad","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.8","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-+RwaBNWYJz4qbHkV/nNaMK54kBUw7FKKnx0I1agHnG+FNPO8NmYFks/46RsIcXMdvK+TLFwyLDxvhgBhGUZmIg==","shasum":"bc63573124ca837c320afca0b9cccce608651869","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.8.tgz","fileCount":6,"unpackedSize":422282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexFM0CRA9TVsSAnZWagAA+a4P/3qTk9+8vd20LokNkjjt\n6g8at51pyNCYcQLHNHhhA+RuzCSkZ3ZI/ffZWdObfCq58iglg9+gtrik1GvC\n/YWocNYKtDLEhKxn9qk/IsRIbGGd8Z033JT0Qxh8Vhjg+hK91tYSoivWvq2k\nY3k58y+J8riUDYrjXo4tr8Tg1W4xtnpdgfqqquhPsyHMSvO4U2etE+y6YbMZ\nT4MS+/ca+Mn+Jfbi27ENvtL1aw6t1maEWjVPO4wztt1Ah08wc2DjpxnHGg3l\ntzV8SzWWQ95iYhXzsFMDaQpWN4PYIyBxe3J+5/pFR/qVinV6I4U84rkzvChM\nsWbUAha8wMM8P4m0dRGMg388BUrr+DpbayjETjsykCIaB8oXLGQVEldXDsk9\n5Btn3Rg/3R9SAfPcLu2TSgradY/qNiJ+7SAAjSQ9WUaxR+Afr83Xiq3PaaAi\n2GmZpx/FeiDPTE/gqU2b6OmS4QLJRBWSf/70vIdLv5YS2Nxz5+RqxhaVB9sZ\n7HfzIfTrLAPuaJlQSldRQolTgr/lDivJPpTILJSB6Qjefb3XT3SXzAmd/PhN\nFEX/v8D78uGqVX0zkjosziaFhipijVAJ2eWWSY7At6CPiFTY8loIFP8MnHV7\nB7DCOsJDmm/eeCorx141efPmhbzzdPuzXsQzB31AG2DrlAIRa+a+jMk9AX1C\nxefx\r\n=//rZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFbBtJP8IMv4m2A0+DuixF7iimMTts8y3BGKqmVF3IfFAiEAtZSq0f24R9ITrITkYh9cPUcGZIy5gSt/8sxITbWXSAk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.8_1589924659936_0.7937389967166717"},"_hasShrinkwrap":false},"6.8.9-test.1589927116865":{"name":"ts-toolbelt","version":"6.8.9-test.1589927116865","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"55fe91f93709ef26a267e791a63c6af3549c1794","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.9-test.1589927116865","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-20yU3AQpxd9H2IrIQsJ+Mln8DWhZ77qBQ1v7khT0vHnes1d7JEfgWgkSq8cXiW4CsdfIkp+F+IpbO/+5FQwSSQ==","shasum":"f078c41a593a8b94fc8356b0d60abb7916e0b4d3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.9-test.1589927116865.tgz","fileCount":6,"unpackedSize":422516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexFziCRA9TVsSAnZWagAAtrkQAJ9v0G436qicx0U3XSQN\nSYfRd35z0iGD7mnmkDFlJqgBXEgAZ9TrbS28/f9R4oSrOC72RO/4V1QzfbsH\ncbnheLL2TRYczutE4HU7TRHyLdlbvxad1IgkNtkwrdvySRG+u8MsNEwPcSqh\nHnDE+v9IO1xLvhpG9vWvEbRxoaWplRZCXgay7r4TbgRgzX3AVCfQZm/MEkdk\nG1htvobpGx9ft1QYCfAPAnHMR1CFsoS7bYvDWMg3SQDjNAptqYS8DV9Nm4eq\n8zxZ+vKZTXhRwySgCIshlo4luDw1+ueVgdOcu2zlcSY0sY2FkHxFUF/gdFil\n07m6XDGRintrf1tUoV6CKfTzuTLFtzlptUozQrTCIWjlxfZao5lJ9eG77nCf\not8ddy1XZ8HkqQIPB1yA/ws50RurJrl8eolOTfqyfjhqud4vV0ZKg2NPIVx7\nM7ZqQq7zT1rhgOGS/aqLZCtze22V+mHbXUjcJyEq3H1FkcA4+646mW0reiRL\nguq1VPDrsOgcDILIK3JKCtBkJYArqg1EMYj3k7TCv267+MBTEUojsK2jK5u3\nBGeadCrR98VzhAhQwotsfaTt24s/IM4JZIescaHeIQTWQeyDM/yVPj6crRMH\nQCe5/pnK5GP7s6JwV61J8j9zNUSjmvJa8qEyHDqSNBjJsWtar1UIJzLslwFc\nDkao\r\n=Un5K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsHSRBKHhOLQys7dlstV4pXIDpbuKpt4PVoE7YioceVAIhAKWII2ijZrTLBjVS9TOQr6GMcfkg8z8CIkWEv+TANu1g"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.9-test.1589927116865_1589927138459_0.7002529818500016"},"_hasShrinkwrap":false},"6.8.9":{"name":"ts-toolbelt","version":"6.8.9","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"55fe91f93709ef26a267e791a63c6af3549c1794","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.8.9","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-H0SkumcqG7uyoYYU/0dZYJIVGainU332XJFtXCIKx3uMBJ6/VlSjqTo1U0xs432D9PneUkWsXSX+BpfMD+R4IA==","shasum":"e290b433ffdaa7114345103bece34a49753e6978","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.8.9.tgz","fileCount":6,"unpackedSize":422497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexF4dCRA9TVsSAnZWagAAZk4QAI4LM0HSvOxQv1BXVMZ2\nk4sHhvWBP6CwxJFlhoslDUlwXwsl3Lv5MRD4npOsKi3L4vX8wCjXSr/9UD3/\njXKX2TARHG8Va6Yn0zrkw02oxOKyPUSRoFvDGTzpUNvzo3CY6AXKDXnGvbi+\njFHfHu+84WMFC5/vj0Ohr/vA/0wSi8H1xZfcdrAlD4DHQS3yIIbnuHKgI9TG\npUCdtsDNWYfVP3eMuVFpTzy0v10B1bPptcsDXqoGoEB1av0zyB73kMofrVe0\nTe2w6bNJnENhRlao5RteTlzKgiRygD64BaFIOxHe/Sv6EJK9OwSUIbBDyg45\nfiBJVcZuwZTJShtJA5P8EqPy322vX0tRKvPClVNnkrfzJVed+5g3pJJK0jJL\n2MnZh2cSU35nurP/KzmX6msgHqIHt6BRKsfeymD7YqmNuj7LG1YhaDgzadBv\nDEA+oXIOgE3Fw51mtX7sdDjf/1HmYHpXHtEFsf0gHNqvnx5Gy21YvTVdRdPl\nzqxhEd09Z5+zZreIKo8j+Y8bnow++YMCS6tCoa8VJ5pngFtMp4eYlxutGjuY\nlJ2Lwv0rIlTIts5fxBpxKC/kz2lnid2UgmHDKtCsT+bFJj6g+VXL/EE1BJYP\nfRHFlcn9pntDLDkxSQsqE9/Kl6qcPHwuySjx4XYqbI4CbKVwxuFLBwNFXO6o\nl1oL\r\n=rz9O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG0zhD7NuIkbB0BLbNIGK7Hol7OiRXx/GzGMSs3jjBNSAiEA0ebH3A5/Ehe3OmN0Ej23Xp7HHDvQBrS04RY39fAlZ0c="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.8.9_1589927452820_0.5473041630651398"},"_hasShrinkwrap":false},"6.9.0-test.1590092457605":{"name":"ts-toolbelt","version":"6.9.0-test.1590092457605","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"1ce5701438e08d74399e20c385f213232cdc566c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" target=\"_blank\">\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://conventionalcommits.org\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\">\n    <img src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/alerts/\">\n    <img alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" target=\"_blank\">\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" target=\"_blank\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.0-test.1590092457605","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-ywXI7ksZDAzvfC4uk0P3TyAahnYSuWwqDJpwF1Tv/kDgPpzJl94Hrd7YRBXjBFPC0UhR7i+Lm3tDFhvCG4NTtw==","shasum":"a33ac8e977583fdedaf1480b4b10b511800b5568","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.0-test.1590092457605.tgz","fileCount":6,"unpackedSize":423723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexuLBCRA9TVsSAnZWagAAWLgQAJ6gu60JX2DthzxTEBz0\n2bmzvOcqUbObIgdcSZ8FH3NGd6BGJNrn+9T/gXTzbNb/ZkvnS+vexmOc2R37\n8sk3vIApYs5H/YK/P1FUZ+8+iDSJ9nS2wI7JhvLNOB7f8vcoYEDGEcyi0mFS\ncPYCtCyRYiPNDQK6eLyF4esCtxYYa9QoPXHZe9HAGBA0VkepfHprFAXxKk9C\n5yT07L7YmJYRNsEE1ED54QASZbGNmr+UIBXDzjY6DZ5Rr9eATxnlbCdMX/a/\nGx6ajMZ49VZLAISLsMC0aPm0T0vRWfhTgniE+Mnv95LtPvJsKd4TYSMreIDu\nuofgSIY+JcO1t9YDqdgsprmlm5eJ1XGe8Q4dYE18Y6W1xZqOJ22fc2tMoV3P\n0VKRtgqjuvnXN9J2Ee/Xezf6c+o3x1y2TE1x8RMC0B+FVKHGQLE6LdEAzPha\nSoWyuvHCfZGX9VNrmJhHvvMaTWvRvhWYAK9FltqTr++bPRsDOVTLZP7seECu\ndXbHFulSh+WTTUYu0seI3olH0mfmisbYZ44GC0KrZ31N5EJdOJ7HvVs6HwYg\nh6ZWYDhcbqQe8mqXW/rkgdjhs7PoKqFjnGyibq3ohtVegR62BVhsg8lbFovX\nhtb3exTZCNXoMmZg8clTZxEDfDJsQAS3lyOZSv4XWKrTukujIaHzBt8zv+q3\nFTi4\r\n=P0cy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDa6mUCc4o+9i4ObHScA3Cr8nhwgsqS7qeItPakYMn57wIgINEujSCNHY1f54XOyZxKmByT9yUUE1FRuNnPKpWmjU4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.0-test.1590092457605_1590092480346_0.8178701375131436"},"_hasShrinkwrap":false},"6.9.0":{"name":"ts-toolbelt","version":"6.9.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"8","@commitlint/config-conventional":"8","@typescript-eslint/parser":"1","eledoc":"0","eslint":"6","eslint-plugin-fp":"2","eslint-plugin-react":"7","husky":"3","npx":"10","sort-package-json":"1","standard-version":"7","ts-node":"8","tslib":"1","typedoc":"0","typescript":"next"},"gitHead":"1ce5701438e08d74399e20c385f213232cdc566c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"dist":{"integrity":"sha512-mFadvi7O2t/MMGh44mFUm3s0QyMrfIs7W7We06Lo6e1oD4PyXcfYQykoWjhXDwS7+7rOwg3VPnGBowIugZTY3g==","shasum":"49b0f9a398f3140830a5c68650544def828eb304","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.0.tgz","fileCount":6,"unpackedSize":423704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexuP/CRA9TVsSAnZWagAAsTgP+wa8W87O9hCU2+tutZiQ\naNpoA1HDjf6KGaYuoW3jt20jC/yeFuYoATsHWAgQw1TvZT10HiFjr6VxNr2W\nPC3tUxPhQeDW9cpItkx9Y3zGot0A9vahmiuJQkMuclyGWT5KgHp7pxaj2gpC\nxBNslNYGq/UXDclHbM+KH5TfFAjY4czUQ/btbgTeBcXH9p/nOHKbUCtm5Cmb\nMEtwq34zF1YquAjendT60K6RdpDEaXoMiQpPyso7ajjyZRMCpma0yaJmZ2SZ\nanjtDt0SZF/tWLW2keV42RDnF6nUcn/Y1jftFq7rw5ojRaAjCbulI+/GK47F\nDgdhbC6RXXt8K7R/Mn4G04O70Qf3h7uO4Ge7Fb6uaO+TTvGfbSkizMVwIbXf\nXHWZs2bTHiJkRgJA7dmRJKyo9zgSFjfgXNd3zIO4ViBlNRayQZRIHK4PBHBf\nXCF7FSEN5DFs57K4py2RqIigymGp4Hhlho3a9j1/JI7q+W/2hKoJBP3kqrVy\nJTxb1T3p7b1U82J1mxo39Y6FggItFz5ibCM64UykARFk7m5033iQzwMqQbqv\n5JP7G6bvt3UF3eHkLIVI+Omu7vPf0RAk2dMTeukc50llFkmh8qKAOCXqpLKR\n1MG/gLAcrEaPIjSWI/ADKoLoHl3e5i38eC4tU28wzqERRv5t25lkxwmyIJzf\nyNoE\r\n=0Cza\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSRc0Pp08hENzGkK01o2tgNFXYUXPqGYiExm4X3nv4cQIgIubG5k0+vk+tg7czsUP1b7TnuqnEFRWoFhxfU++2Jvg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.0_1590092798739_0.5713906029497986"},"_hasShrinkwrap":false},"6.9.3-test.1590444761405":{"name":"ts-toolbelt","version":"6.9.3-test.1590444761405","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"804e6bfdeadeaf9a1dd67fae5e9982875c3fe96c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.3-test.1590444761405","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-5QvJ61SHdWbjcwOhN6crXodIJX2QpnRS+oKVwUQWEQUYJavNYdgR5q9dSrv/9U7VhFNJdDNw8QfrDi93r6FNnw==","shasum":"6ad4eb2f8b8d29e1e8b1911017cc4f966f23ad2b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.3-test.1590444761405.tgz","fileCount":6,"unpackedSize":424428,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezELtCRA9TVsSAnZWagAAnOMP/2HvFRClYfSnIQAEh1RO\nbrWmYah93xH9WOa4yH6lcCYxzgqH08Wio86mRs8qVkZWwIivzk/Z63tPNAO8\nbvEsE92CaSSHlz2hvonhr4ZxDPU3U43F/tNpnlLLRSGBTptJC8N/CIJFrQlQ\nSM2gUCo43M63Um2NYxoPWfQpeJt/8NWExKNlHNw8kr93pBkbt2wEoJjI5uYn\nICuj/igsuaaHrA3xGGaQSojPglHRVsYWqUCnbSOtVEPURk9xNpfXi4rC1eIU\nkYSN7TBo8s+9yynfRnShmdahZJPG4jqujPND54Inv+UzGXaLZyDG4yN+t4hm\nL61WfY5+QOVNC/86wkQd2Wy7Ix0ZqnI5B1bfxeooz47WcrRugJAE4RBnMhIZ\nJ2z5gAlVwSuQ6BsuH35UMRH2JDSucm/uMSQuTRrzvgOd/+wAeFru+Ye51cGC\n4ikIQF8flBJ6a3DCouDtoqElIT12yuuecXssG8hCZ1UYdjyD2EIhmpQBfIFJ\n9usdrVx4Bw4+asqj63RrksejvXCRQQNg4Qq6NTQqvFI7hqXLWte3pB/HpbSM\n7Pm+xIyQl/f38khyyQYT8VBeciAdQTJ8IExz773EJAhswl+Fl3rDYpmmCgWI\nklF7ojWDGzrRHjtmuc4G0JLEGqF3yID3wuHaupbMXQNgzChDFR4iBSxXIodA\n4DrR\r\n=fxLt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElgi87Q6l+aW27L1vcARyrCKDPZFVyaT/9Tb7kBSsSCAiEAsLf6vN1HFa+qEFcMLqKSsakV8nWJDMtqJsGzQshVWx4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.3-test.1590444761405_1590444780991_0.5476540864145902"},"_hasShrinkwrap":false},"6.9.4-test.1590444938413":{"name":"ts-toolbelt","version":"6.9.4-test.1590444938413","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"0d5f604d377f5fa5810280f6d719c581609d8897","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.4-test.1590444938413","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-XDZvPOeHnpRLZBr8BvZ0bO7FN3gck5vtT+YGrzKPlcCiGdxlmMf8QqOpU0GQbK+yRxF77ZiVpkVIAG0AZuAIUA==","shasum":"1a18b0941a0b9fbcf0f72dfd9bc9481707c2850a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.4-test.1590444938413.tgz","fileCount":6,"unpackedSize":424661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezEOeCRA9TVsSAnZWagAAOHkQAICtffoqFunJ1fffCV97\nx59q2uFjdA5DHUp8Mlf/ONFyrlIb3Ztm7HkTpUcT2KK1Smc/+MCN+5vH5iiR\niJhwGKEoApx8XqZwyiKyWxdAUN3jmrDnLJHsYE9iOPs+zX2+di2ZfEWaUqvW\nbyFYfgmqUf6yolwzXhHl6gwgF5vjaeXsfZINkcMPmTZT/9JDBFbNENH+RlNo\n5RLr4e2gIXl2H7Qf+zu9JEbhX/G/d6WL1MQqUSv8IEIM+IpecxSisPSg5Z1m\ncNrnSzCWzoAdDsVatLD1gQlQf8I0UInKBtW5SZD4R/WYVIaZXVvSJxVDk7EK\nw5D3P6uU4YdRMpGRBuwGG3O1KH7l0DJ9qarJdZSwSLztmIBz2cDhiCd7t5Se\n8RN//yb3hG7cCTeQL2WmFsmGXLs0LgqaarQ4pmG/f/L14MR0WAI72miXCcat\nq+x66QN69sxpMQKn2pDSkjpAzaTjbbApg+Ho9CeBMnubIlTnQP9qSQmkE4Wf\npdkBwqxUsA+PmTxKxQPnMLOsYb6sLIHuCRVO41xqahLLvhFWJojSRidTgPrN\n8C/fGYIzg0DJIjEYX4qGcg7E/DZgkSEc3KW7oVwucsr8HqLq+kNsJV/8Djp7\n/GAbNrPYyeIU2wKG2E1dHMNCyHX4z7FeqvZHzaGTRMg2FNPD3ubv1gBNyfyp\nMt8R\r\n=qCn4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCV2TpBs6haUWN8ZuscW5YjmK3f2weJLnN1QB5Qn274UQIhAIyH5x/ZeSNPF75pkUW6Q8X/bQ+PJpexF9dcaOW+m/bS"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.4-test.1590444938413_1590444957951_0.9601744943118293"},"_hasShrinkwrap":false},"6.9.3":{"name":"ts-toolbelt","version":"6.9.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"804e6bfdeadeaf9a1dd67fae5e9982875c3fe96c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.3","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bFnxM0kOpVBbhzVghYeg5lGPqi26wv50V694NCmgse+z5+nrueeKzCspVsYzXBVAlVZ+K2ZMc/0Vk78BWJDusQ==","shasum":"56fcace13148592cd27f3a355a0cf0e15c9644e5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.3.tgz","fileCount":6,"unpackedSize":424409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezEQbCRA9TVsSAnZWagAAeO8P/2+JNaT4NRpKfNofgYKo\nUE9UdQRQDv812fSvfh0ddjCELGqiXU+NKqtdjC23IndSjyExxxoU0U+W9Ak4\nrCnV96WHkygxRr5PnVhGgR165ySn41DzS8JajkU/180vJNcUpOiAhMTO2oK4\n64HL/lYrsBPkmNaNDY5VbCyliNbbILndPsed6fjAgNrusGariLCxL0gFObny\n2mWtF1QbFHnQeNQJImKw1gblHDkGTgcrdXF5x94466fy6D4aAIuYyhhTJhJ/\nToiv3+9H9GyqjG9wNH6W68IoDeeWRuwt9HShTtFbiWGbclNZnrLNRnaycA15\nToWBs0soh19RegBPXaOHD98+ZIgiCCE6COSNScDxQ67R1deMiDGf5sVYv3JF\ngqo/djb7m7E/d9wgBDhHRoCwYhQ+uKKDmjdFoGQPGRpIOioqCYKSlSXdsZuC\nNcfga8Y/zLW3HN7VvD+iw0AAx4VvH5IX72oiWkIuogA7oocRoh6ILz7yNKFq\nADBKRbrhJnFcZn5fmBOMAJmx0wcIKpf0os2hS0n1IYE6I6api7JcifqfRLlP\nTlavQpwT2xfMnkFlgn17GcWA5QjhCkVv7H8CJh8G8XIukeSwdyB7Y8pdNBeq\nQoBp+LCBUBCrfpdL7rVWPXs4QuhtxuWtxHHgsN54N3xM7i9rTx2q2GuW5SGp\n3CZN\r\n=yJUG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE7SOdeXkAjimQH0mWFp94NCxAN0tJCxYPhfGlGVPgMRAiBuaM6qiSlrvCpN54gv0gZrQFUZpGzzYvbC8U0zSERgEg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.3_1590445082948_0.47572505079093985"},"_hasShrinkwrap":false},"6.9.4":{"name":"ts-toolbelt","version":"6.9.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"0d5f604d377f5fa5810280f6d719c581609d8897","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.4","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-muRZZqfOTOVvLk5cdnp7YWm6xX+kD/WL2cS/L4zximBRcbQSuMoTbQQ2ZZBVMs1gB0EZw1qThP+HrIQB35OmEw==","shasum":"cc3a070d99c557c552b4f69e36f13d430c47a760","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.4.tgz","fileCount":6,"unpackedSize":424642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezETOCRA9TVsSAnZWagAAhM8QAI636zLQVkebP6M4IOlo\nl16lQ9Syfr15suokiHW2fqgnVCo/1qfxYjLZfzELqYmLeytnZphz3k6fxoFz\n6QB6PXwlchFmNeiFUZi+omSv9Xwhi5DMKBbt93BU+vCHqSIr6h3n8Q5l1dhk\nLzUxbhnaxDpQOaRXCxhkuLv6MvK7dFNp83BCbFWoZmgUIDchjGRfiZTKHxIv\nGoONLuejhm9LV3XHUwwSmUZCpQYVRlcCKrv6nB3DcooaqnvXF0Ba2SewYcoQ\nHBFD54UBWaoFVtbhPhY2Ykk9z9ywsPhC8WQnpH1cFvuncYaa36QiPZ4qTVU3\noFVN3/ZIVM2xtmN7Uwxk+5edbvEGTSFKWDnVK+6q1Ryh808gtqQCazmDuv8j\nW9hQi1n2Ka5k5Wy2M8lT6z1XAi+9ckr6CT2ZNFNv7RTnueMA/UAJhf0UAHvP\n7DNmW6Y3hG4HoVhuNUL9plmLBQNxojnggbCxlfNCobEpaoL9Nqs00Okt2/s7\nbo4rBw6FxHM40YXi9T6miEu0JFpuXm44FNTaqrUKpgYoyinVCV8u73KP1+KN\nmYuK4BDp5dBqqZQvWDJz3cIfVVo9cV+6Vsdm+YkhR7c1BjZfmrCScnFGxazx\n+bUCTwhgoYJmTxLdM/WMht+5VUv8/owa+5R6ZZqjdfLv3eLZpN3mkhcwTqzr\nHqum\r\n=pn2k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpPbMowDmwuiMC6TnFoDaXWJTll9wi3ZX9MEv5OBmqggIhAKTsbtERhM8doOe+EIjiWBJznUxPR7vK1EaqbmggiwH9"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.4_1590445262063_0.8472524341583421"},"_hasShrinkwrap":false},"7.0.0-test.1592428067604":{"name":"ts-toolbelt","version":"7.0.0-test.1592428067604","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/_apis/build/builds/76664/artifacts?artifactName=tgz&fileId=8D3BE903E9CF24E4917DB55EBC42901FA1370E5A647552B239221DB9A3778F0302&fileName=/typescript-4.0.0-insiders.20200616.tgz"},"gitHead":"1510494249799be8f2fc7e8924d0f16365416add","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@7.0.0-test.1592428067604","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-5NKDADuqpH8bzavsfbuurgwqmQdVy43ViOAOGWRwqm378MvnKvF50b9O/2tBBJCdelosVwZZd0WWJHz129eDhw==","shasum":"07ff16c9e4e3bd1add069c92066c7b28afcb10fb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-7.0.0-test.1592428067604.tgz","fileCount":6,"unpackedSize":430826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6oY4CRA9TVsSAnZWagAAhQEP/RVq+Q5lovfllUTqWXNv\nEF16nkpH4sfuYwTAPoJG1ICAj3W34u0PopBjHIFZIV7b64Qp8rPGOA9foJbE\nU4RJgnxwtm04MMJ/RnUHnlxsuMxaWsRVCGh0iO8yE+1ROwSQH6LST/uFxFTy\ndXSFBBl1jienvYgy13JoYBOyZjG7nZAYDO0ZH2O+6UcOtXLIvslPxH9he4Yl\n3NM3RPFpkF+4pRCejXKaT36oVvca0L80kB6a9d358xMlPGlAHnzGPFCCq67T\nBcLZqF+d4ZlMc+sjDtXQZfThIMQMt1wG5nPP0y2FfzaAHCwyZYBgFZ4mBXlA\nK6D6RXcipdt0qy09doDkuRFrFpBhmGnfBQ/geEeZjePt3B3VqKj48p362Msy\nJXRdXiCRHY+LzIY2JeLVehdlvveGr32f+H/Fj1I9kVEJKpl4PSOKr4AizuAs\nw2QGZO26i+OR6kYGYXQ/EYxcsYm9MV7GDK0VnX5xKDMBAtLt44DYNfFSaEcE\nMVH09TaXfi7ENbwA9EkFM4yvIIsPVbCozu+hlrv+3tHRPZ0ZJa6sGW4s0xTW\nwhgxhy3vVf6HYNJ0BuGeYp9ulAZb3HROr5qa9qsMZRpkQah+OhASRId52HX3\nEHmNQGZZxMqRi49TztrAQHt4yAME7iw+1zDuoMbktPLDWSwflN+X0ZlW7nvr\nhhwM\r\n=CNvA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICJAuFQZTenVs1yv8pZppaEMnRHyzU+aOoq1BBozPkDpAiB1Ea232bgGcFPJrpORbZeY+aq5v7xTYuSKp876+DQyEA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_7.0.0-test.1592428067604_1592428087674_0.025303972469477687"},"_hasShrinkwrap":false},"7.0.0-test.1592471066483":{"name":"ts-toolbelt","version":"7.0.0-test.1592471066483","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/_apis/build/builds/76664/artifacts?artifactName=tgz&fileId=8D3BE903E9CF24E4917DB55EBC42901FA1370E5A647552B239221DB9A3778F0302&fileName=/typescript-4.0.0-insiders.20200616.tgz"},"gitHead":"3d6f7cecbd20fc98a575b935d2d02282257d3991","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@7.0.0-test.1592471066483","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-EWgMOIUNHHv2U6na9hJi7JTnszOk6xTj2c++hRu2NN7Gxr+yNZAw7jwqAosbeSt+rzWhb9r2FEfubMlyt8JOJw==","shasum":"421bd96a38169f36c945e735bda82344416a5f34","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-7.0.0-test.1592471066483.tgz","fileCount":6,"unpackedSize":430719,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6y4vCRA9TVsSAnZWagAANSMP/2V4ZoYslmLwpVWbf3BX\nD/ZvrFpEX1C55N3uADOPp4dWt4nDL/67cbSXG6AafaCg/lsHwzow2lIjK6lr\nYBQJSERilhH7wGhqHPXF8101fG6YGAwtHe4FglKRor84gsN2AwTj0u9+i0xA\nj/jQdUHQsqo0lwdIucjkIjko2OCenJMx2eiqBl7AIpghqeJnFvcEee9UBLFD\nr+ByjR4/orFUScJnyEka1URc4Fy+FZfZlmPz6ihrtmaUasGFLMeJAapWvHvL\nTbqrvLiDmKBBCNt6Wl0OlBnSeXmicbqcu4ThkMWbGwaZEpkH3+HJlDViIKw1\nL6JHUMfdPEcsPiTyTY5X1u3eRZlB++x3ZGXx7nJ7OsnCtI0thW0oe9tZIKp/\ny6CVy0APNWOs/c8TanQYV3NozS6wjReJgG01OGaVhiW+UQjeCdz2dJiFwfsP\n4eUFRgzqIvI+rMzDahYxMXaNdR88YJy/FiQTWyJKVmSfAv3q/Gw9dASMTNaS\nicsKL8xfXtRAe6hsn7gJjEIJB859Zs9htpSYm5kuawbhA5ZEy6QvyWpeEnqK\nThVvBe0GqLdwGghVlkPpBJmKsfuuXNBbI42NibhkC9s0lB4VJEFg24vBDX0O\n2t7Zv8j+kHXV5O3ToVb36H6d4UvHhgCriNK0RreOSpI1lrvVZpKOD8Oo83no\nhGng\r\n=e9bN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAPzYiPlaAQ8E7rUZsfEDf9iEMbAwNB6cfiMH1uP+rlgIhAKC20oXyTkvNEj8xoktx7mNmSfdVJQJdhGvvvxFsglVV"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_7.0.0-test.1592471066483_1592471086359_0.42989725024845615"},"_hasShrinkwrap":false},"7.0.1-test.1592471100026":{"name":"ts-toolbelt","version":"7.0.1-test.1592471100026","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/_apis/build/builds/76664/artifacts?artifactName=tgz&fileId=8D3BE903E9CF24E4917DB55EBC42901FA1370E5A647552B239221DB9A3778F0302&fileName=/typescript-4.0.0-insiders.20200616.tgz"},"gitHead":"c7247b687cd938c88a566f7322771ed16b59e171","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@7.0.1-test.1592471100026","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-AgQphFAkOKXsKwwq4Nt+ifpV9+V66xLn4UCvg9RnUIp4uEg4DzzcSzTpA+ftMzuSIjOAfBIz0dulPI/IKrOkGg==","shasum":"686885fddcb094742f95457778d4c3d921949019","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-7.0.1-test.1592471100026.tgz","fileCount":6,"unpackedSize":431101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6y5QCRA9TVsSAnZWagAARpkP/154Hx5MhzkOSl2J/pge\ngW3vCDoCyYmTf6doawKWzI7tpy/Nu3nQDhnaxOAMeMenBiB6qeU5gq11PRrF\n+HDMcNl9WQecpFv5PAzzV+gio3mR+nqm92Wx/S2ujUFUmpg/mKQUkET5MmQW\niru16HNj2Iv+9X9tCWtIe+jWFWdI6k0/diA89w8DjxWQXusMfsyRL+nV23s6\nXPFOMfvf7m+cRQGwCvyOjwfnGrYJzmr5m5/ANVUee4o7QDTZGI3CY+BGespW\nQRR526Kfdq8hnPbO6xXNZ2r1TIrV9MXl80fbz9ovqY9BJH8XCo9Prrk5HYdo\nno1bZWYS4LdEj0BeutU/u6f62iXH8kPQGaHhfwUFJLW/Gq0hLBqQy3TCIWTL\n6FcOldpbxFlj2VSrTcCbhfu+p147WiMC+k+N71pIqvfL8eO6qglLCK6WAd+v\nPHQgSo9kDEYr36f0c0Pam8HHrRM1QpDWzv2NjAsMus9ZRDEfcWg9wPG6FuXU\n4x+oneRCqUM84KauH2yPcPUKckFtqY5y1Bve294dS/5K3ZysCJm4kRAGD9im\nJquiJRQEV6CcmsaD/ZNbt9nsV89vI7125ESIp5TDTbSngyg3wGBMjlfSGvcZ\noF4/ZP/8wzXAv1iH3r1L1LULpcY8LrlyqwOau9ubT1PsxRhVr1wtLFmv/KH3\nXfE1\r\n=u0EQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEldh7MNxT9Xc9VRM3kQ0e9cuWeFQCR6Vr+iJ9IRVyfQAiBNQbX3s6mj7SCUUiiMt4AIc6tdov/Jitq2QcM1hqZYMA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_7.0.1-test.1592471100026_1592471119486_0.04858847010848533"},"_hasShrinkwrap":false},"6.9.7-test.1592471721140":{"name":"ts-toolbelt","version":"6.9.7-test.1592471721140","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"4f3a036f5fbc04037febdbdb64cf095e57f8bd19","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.7-test.1592471721140","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ldk1WxtDPy1Zb7+t7izXI1Fx+uH0KjjipggW/ZNy8iQgqZN9kgIthZiaGhcgOe0AbIPAZ1TTHWmBk/QCwOET8g==","shasum":"c59965950be36cef37cf699b8d2a099683172aaa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.7-test.1592471721140.tgz","fileCount":6,"unpackedSize":425488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6zC9CRA9TVsSAnZWagAAFhAP/1r1EooQ0aa0gKDwk2mD\npt6ja2/gR9CksdZhFmFdT+DM0iH+B4Z4LPhtDzDVSAkolqvIHrPFtDKCoN+l\n2FG79K1aX7DeLBpK3FkKf7pk6Sl2GD9N2Ovqf44lSfxj4dL9Wk2qFySEDvUq\nHiTZGGyVX6uSRm+YFMLE0hExx4uX0ZX7AXd0ExBIMjr2JOo0vsJKt6ZINjdO\niu+J74TdNczq8jW2X5y35+VunrPR87WOfNFtriDhy/xGE34i/wKWR/MNvDWH\ng1VMfeXt2ckYIpLKl7xIl9miRCmZYBUZ3wEjX2IkH9MOHkqfnuVshOQoiHaU\nodxp9AxneNrf5EZszdtVFfrDvY9Y+VWPw5/VDo27xtPTFmKrOkcu2FnRYXaE\nGxGFgpil9Qaq9aQXdbjAh/JQK4T7hpVXhaW5fpDbCA1z37kuE0BJ1aLPoYE3\nMNSytKAFEucWbYHRGMehXFz04wlWcDVmgo/0Y8WVHGpar3j4iseSYEVwiAV3\nX1xnQQwvn9vLhAIh3uY0PKGcemfhbPjcsWjaqZvvIFJxRm1N/lyDr/19TG+y\nRD0FG7ev7PdyjkA0QiQir5E0K9Zi1aLka89qXWYoPO1Xu0/EFT/GA1a+QA3r\n3i0+5MWK9KOgG7uxdcE6VTdj+FDN6yn0Ci9aBaiIGPaZPOgncJG9Bim+WnL0\nJA0u\r\n=Hpjk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxcHZ0JvhuEQkIzZTG1tp6Q84Te1loS11sYEm89H4ncgIhAPRW2QDPu/gAZqkCs/9W3lGIz9ev3fW67cohrjM2pvRc"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.7-test.1592471721140_1592471740563_0.07375131839619775"},"_hasShrinkwrap":false},"6.9.7":{"name":"ts-toolbelt","version":"6.9.7","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"4f3a036f5fbc04037febdbdb64cf095e57f8bd19","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.7","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-y8EK0Q7ZJzMTJ8aD1UHqNvRCZR3NJyOk+tRj1Ps9j26CUgdhewC+7Hu7/G/bTbGP3YJry5cD4soD6InDiyyGXQ==","shasum":"967ffd5d1fcd20902fa4b7def938d8a68c94c83d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.7.tgz","fileCount":6,"unpackedSize":425469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6zHsCRA9TVsSAnZWagAANS0QAJXZETZwQ27dLxDhAUpf\nisXel7QuzICYF0rsvVywymWAI+SVm66vRvJVGfXKhfA+PWl7OqIZIBnN2m80\nVqVerG16mXasd6PsetMppO87o2hUZBb53xakqjE9W9jezgXlUJ3883Flbfrg\nOyeiiQg9I2eoQIi9I8uPBneeC0Ron2D/m9b2s98tlVHjl88fuRN/rVV7g1IS\nmFCv6W94LTG0RBuV4LLF8QuxEBre2NEzH11S4SQJ6ImUAPPDur9C4JX2JT8k\nsnjFRWGGqxM6+rNPc1Ff+d/4eEhBMqJj3MtGN7vVIAdnZup+eFB1YFzjNVY0\nqyMYDhHX3VJxIhgCchOj9xI93lm5tI1DTtJWZA9Q59NEh7bhm/BovmqPVDE0\nUgCXs+OEtJNT8X/bFv3wg7V5WiBhln61t7Zt3BkJv4bPRexyIjFfYM3MyVzB\nuYJQNWmeQHE2QhY3LhUIj1CggVyi1zMkpBo5HntwSBc3rtHKmeTbzD9aOFtQ\nkmeTJxl0It5G5vk75W8UA3/BFCydhBYo2qo5+ncRhIvHoubfllEAHK1Y1iRN\nYbWNEv62nGvEDMPAx85jIxjGQPpgjCFq6Esj4/drmdpjTzprWN4rNU1wNpHz\nYUGuBAvVH9zn1K00slpqPJc5BmKeWtxSQOou4XK9Asdj6n5Y14EanPntNtcn\n7ibq\r\n=T4Qc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZu4CBSRgHqRuawFD58CLtFSGfx2Venroi6mhmwNfAlAiEA4/TmiB7SuJpU0Y2KHNAWSqxTqa6RkyRqfljtXJkwDa0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.7_1592472044437_0.44835449436214714"},"_hasShrinkwrap":false},"7.0.2-test.1592476063059":{"name":"ts-toolbelt","version":"7.0.2-test.1592476063059","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/_apis/build/builds/76664/artifacts?artifactName=tgz&fileId=8D3BE903E9CF24E4917DB55EBC42901FA1370E5A647552B239221DB9A3778F0302&fileName=/typescript-4.0.0-insiders.20200616.tgz"},"gitHead":"8d3de4cda1432172634f4f86426081a7c735b4b2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@7.0.2-test.1592476063059","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-skuaP2cO/nGbkzleI4BguHo/5jmY0D2Gcf+Ipkkwi0NAfQxghO9OnCgCgjI1ReqN+oAFOOi1pDBSpr67AOP1rw==","shasum":"caa99b1d106cee64c97eb4db0a696d08386bbb24","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-7.0.2-test.1592476063059.tgz","fileCount":6,"unpackedSize":431175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe60GzCRA9TVsSAnZWagAAeUAQAJb3vdoGgZvQ+I+/ZN8q\nUIWgNIGbwm1WiTAt1n1LWrfbA5y6J/Xfql1aYloFuMuy4LxhZY00GyfThbWJ\nxLXRATcmY+k63vY8u2xgJmDB5Xg+SaMIjmGYO1TtO0XvZ/nlY96VSUdQ7xy1\nOTauxl9MyeXjo2fu0bqL6NY96FZQN8HYuNBPAr/Q7DBiL/8/GVK3IW9V2Kw8\nd7bDZCITFMMoO9M+aitanOpEcvConKh6PldolmsGqoPM9Lol2qz4nX5Dq1QC\ndNC0C1ZSoOttk7gqyjz7TAauSB0GRkgjATPDt2sXOfJBTcyjr0dP0gtepyuC\nk92MVEIHfi3y5DjtQPqFCj7DuLEwFGIxexV27/DPEFEABJOlJVFMzqnCkOgH\nHD02Ym3THu3V6gPpZJHG7FHPqqNB+zKV3wh+1F2antBzBsX3lDKAIbPQQY+N\nCIXol1+C6OD/gzYo5NLtM3s+LMuoCAMuqdlRc+j+h8ZxWj+ShUEfu+0yfkjn\nGki3uVa4PbsuUtg0qUH1iEhtA13rjPlc0OhhesHs/rGyfGgWaqLrNLx76tul\nzBJQZQs2aFB2cu0tXzboG7aEF7S7I+pcAvjr1/KE2QrxnyqXF1a/aR6V+nz8\nfohiiAAaAWNmmnTg6j2MaClVfKcEg2mY5wSgGszCrV1zWrLRK0TAZ2jldULp\nxEoE\r\n=o7kv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDplN5xGNmf5rxBwboe1S39ovgAQS7XDhOiCYaYjB7L7AiEAhidllGaGLp4iRm0u0mTxIKWgmkWvX0ZzffamdsA7Uec="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_7.0.2-test.1592476063059_1592476082617_0.8921785509234266"},"_hasShrinkwrap":false},"6.9.8-test.1592477329982":{"name":"ts-toolbelt","version":"6.9.8-test.1592477329982","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"5f8735ba59935a10e2014b460411019894973d22","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.8-test.1592477329982","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4u0bAp8JuCgDezVyqNCK4ktSvXKNfrr+vE0hKMRnEJwzSChiysvrJ7NP83NHiuI+df3QEQDysWANkK/z2WgPzA==","shasum":"33c47bfe7c7155244bd6868000bc95d3d98adf5c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.8-test.1592477329982.tgz","fileCount":6,"unpackedSize":425558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe60anCRA9TVsSAnZWagAA9K8QAI0aHwa2Eaf+IKaFuOHD\nx5YOp6xPWe4dMxENbTZIo1anzjRJNi5mqvcPZWfJYz+B0N0m6djoIJybZY+F\nhT8DWgVOEM3m4+YSkHtmHjAw25GgxkiFSglvJvAjI2IgY+Xkhk1w3HjXuMJW\nSG1la252v9mORR2Q6SE1RrqzvL+CSZp4cykE09giOXIRGmQE7jqfpTSHHLef\nLeho2BKamsTrRuyVP3pzLXSSjj/NvAkasFtoS4nVc4kKKkOquLA3GiXSDVSC\ntuJ5rVH8foBpJtliqse+0yy79ol00Bjk7txv3c0C9ewQjWU7MZo5uA29fTH5\nHjga1QbZCfW3UJ5Uv17bYZnwixEB5AB3fLZ5wO4GFdiUp3TtQ4Sxs64V0G8O\n00Lljq6xoFCXPUTKcEnMxpAAB3CkpBRWET2QKS2YWcnUyTgOepukru1/9rKv\nufZXoaXYdJpZ16VbkWzSzfLMSGPHgiUm+5eSFyJ579bflkfQHKOWO9eo+T5v\nSr49ZHf5Bl94QaOKIx9dtJrb8sWzGDKEWjLMbtNlC0CoHbpIIDeCA5irsetj\ntI0X98DqEIWfIn2lcDsQcQTIb6Pqrr1EYdickI2RRZPJn2qjyya33T7LMruo\n0xl5r1HV5uF4Wq9UjMMYpeh6iIvcQLjhVFvYXw5rbdHgfxxwh51TeiPYfGgu\nJ87N\r\n=JDBN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGIDtvAdv09Dy7J1PGXkJgm7cVMG6T8jbxC64TGd1LNHAiBrArQ/0uTvaRvmoMUDaAnsyibbPvXtD0QFLTeDOXhHVQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.8-test.1592477329982_1592477350974_0.559447109464857"},"_hasShrinkwrap":false},"6.9.8":{"name":"ts-toolbelt","version":"6.9.8","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"5f8735ba59935a10e2014b460411019894973d22","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.8","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Tdz7rLz65zwcrE3W0ypl9fC3dDqI1mc2KgiEd+ZlyGSYma+Z3SgPPSiqR5lt3q6RJ+eDe+jWmOPtfouv2IPqwg==","shasum":"507a0f2116e693e450c36839e28bb14713696668","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.8.tgz","fileCount":6,"unpackedSize":425539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe60feCRA9TVsSAnZWagAAIr8P/1H3d9KjRWXIpJWETUd9\nKhxo82i79/4J0g7cahZpPgzCSZYa5//CO6pemUr/DiWOaOt4KgqaHUH56Rwx\nw1JhbYroPzKjOP1k97A8JdBCmvG2cJou1Mxyf9Bt1VBnfEOW4g8JUhYbZMEm\nGlg1m/D5CoWxCQ8Mm6k7EllODz7rk8lsneO+UuCFksVu79LjyVAfloTq2CPA\nPBthl4W142Q+JHoLE4sp0/R34mhH95KRhcgxUys4VqYz1SJYv6QIYpkgCUYT\ndG6TkcHxGL9F4uurindvVarD9zawZoivQOMLuAL4+7RNiWslx21I20cyyWQw\neDyEoaZxpcLMB/QQTC5rK9ikvZpcXCklp8DR6FwukdJy0j/4IzrjHVWM7diP\nc/xqh8gMj8tlRBRSy7Z+354LHn7P3b0NK6BRh0gYU1jLBcNdXJ/92Fa9zXG9\nqVvMkCa+ji5p7H7466XlVHDxN8+zynbjvuLZlp/q6YCXhish5PJeN4iIoiNi\n2y8red+YO8C1PmbDkz2bFnqWXKxyR/uiKelvQFFSfHNC7S1FVatuSxFzyE3H\nfVI4efHHgIQ/PKynoIqiUiblt2fAzxk1QzZHwIOiS/AK6MaxhGi1BUrYdNeW\n6pYFK649shOC/4+DGYEUPhe5vRMcDiDG63N3dtRaASSJugSTkfLC65GFlbN4\nmL3u\r\n=TogB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ34ENj7kBjUft+u5HPaiVMNkjaYRp9bZrRncpb7fU5QIgMAk3gouhoj5tAH10FUJ+0U0l8MDbIPTTsF3vtUnhibg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.8_1592477662128_0.062259679486782016"},"_hasShrinkwrap":false},"6.9.9-test.1592480942079":{"name":"ts-toolbelt","version":"6.9.9-test.1592480942079","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"9054f958a39179a2ea7ca6d5c422bc06e2a8e047","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.9-test.1592480942079","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-cd7eoHCwkvkSOD9t6kuyS+ws3Dg/qhgfAdpMfN7FLzk2QI2toFLSAjOPS2Fsh4su1jepTPHFGbVZkdomj/5Egw==","shasum":"67380c59f59a584a205fa549e345f8cbbc9724c4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.9-test.1592480942079.tgz","fileCount":6,"unpackedSize":425805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe61TCCRA9TVsSAnZWagAAmO0P/02FRvgr0CGOOAoXPVYm\np2SJfjOJ7nbWDoeKSZAkKC5cfjGlHWywNIYozSxKJhDwXov3ke8bwA/9pcVT\nTLOQiMVASq0/KxCtFQ6RcXV2KbwAuDd3fh6NltEbhnz7xwX65EWrqC4nk5LS\nvAyj3zQqUitIUHNu4PBi/meqNRmRep/7P5zgo3lLPpBexk7ktsPMkmncKbSB\nSUCAMoIJhD+nG02+1gMpiFb8Cb9NXrOIuankFjHXjRhStUgUOf3DGYqnbNQO\nh28dyfKEN/k7rkNXn/z406iIL2oFNTkwXl6uCiKmCzdZQoLzEp2J7wnaDrLk\nxX1c/3/goOklCHrn48/AnfFtrgrtlL9TkEKx+yYgLAtrvJClAEGR1jS9Ysxq\nA67CD4HO+VyBW4YE/l4adxLSqm6cgChsAkWdd3flkhie2QbAnaqqXCnJ+ryM\ngmqK4G5oFJMI1Lgy3YjD4RvGS5x7cjf8kAeN2EdM5he3uX/ulKxxlGs6nlzf\n3Cnlnye0Qq0qVc0GABdHO3eGOj0+LGwi6CM/Gg1MufnLrf1VkWL57D/EEt4j\n46T5vKl1WbMZ5agsa5hccTvqh8JTbDbBMpwOJKj0jnVN0ewZFPo+Lvsk4o7k\nqh5F79sFaG2KpCYedQ1oJ1jXNU5xdGCX37AhqFjzzgEwxJdWoV7sIfuNGwgq\nI1il\r\n=IFHS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBIGGr0HFnIJui9ZHe8e9SNAg8+hqeDXMvIKlpdrbraRAiATydL+JmLHVAYEAD9MwnWTkvElMJHu+g0o26C0hj7pFw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.9-test.1592480942079_1592480962262_0.2687923646383452"},"_hasShrinkwrap":false},"6.9.9":{"name":"ts-toolbelt","version":"6.9.9","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"9054f958a39179a2ea7ca6d5c422bc06e2a8e047","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.9.9","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-5a8k6qfbrL54N4Dw+i7M6kldrbjgDWb5Vit8DnT+gwThhvqMg8KtxLE5Vmnft+geIgaSOfNJyAcnmmlflS+Vdg==","shasum":"e6cfd8ec7d425d2a06bda3b4fe9577ceaf2abda8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.9.tgz","fileCount":6,"unpackedSize":425786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe61X2CRA9TVsSAnZWagAA1UIQAJIwI8oehUDPK5lzba6n\n+s80zdzHMK6uoyxqq3omOdgLNoWc9CQUOW18JqXYakzIOdqazLr6+WRN8tLj\nW0JrocyNOvLoXC3LPt48fGM6+0RVlbDylsXoS+12fugJnOKN7n6yflEVWMS6\nF+S6VfHdHmsODObpK2fY7MzpPfCx/QNII+3T4gb+1InHZ5FlCugQMY6p5MBV\nZv+/REHUMhfobajR7rmsLYqwk6hCtlmzMs78LAvaWSDCJ/Jm1NFcmjZdxuvP\n/pUcYNGwasdjT5Y3LkM/GsHUv9YGcqcoHgu3/qVjChfiVRMw7HjAVLjQFRyQ\ngHb+gPOhFfItNinz3vvCabxqhdvSk7PpKqiys8p8taIX84Z320x5+IsMoy5f\nEIrUO6YW0QVwaNGcXBdHdQuvd8D6Q15mecrZgQAPiliVeC2lt6YLXID8qpT5\nN4gX6xE4M8NfMTVhDHsw+s4SBlUoZSPgEGgFlgKrvir5ANQILg8IdVnRC4xY\nk2Ak7xwbcx/Cbd7SdZaWUnBJj5Dnz3lV7O09BFZCOrSEAq1yRYpUROpPXFLS\nF1/UrPsAsuQPJRmNGNHcaMvjlR38ZsmfvlqZzDArepvigrilZ/23hbeIUu8s\n/cBFCVI3fIPTc0qkuZjVg4Jk16O88iKsSt//dicp08I437nVYMRej2AQRx7+\nyTyt\r\n=4WVf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDj7G8biyBxdfDj+9qWTk7k83BoicLyIs+OqKqd6qxJzgIgLMgtZMedKFazT9yji5iFBLgUvb5mR0Njuf7J2rvesak="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.9.9_1592481269583_0.5354372674997419"},"_hasShrinkwrap":false},"6.10.0-test.1594209815818":{"name":"ts-toolbelt","version":"6.10.0-test.1594209815818","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"ede689c2441235aac5118de112bb56354e6d2a31","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.0-test.1594209815818","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-zQZjmJKitaRDhjob70hCA5mKcc9Bn3lsULQ+RDHXwYZNBLkTxEZMlc5hh/mdcZ47sazCXlGVtagcQOKt4NkIKQ==","shasum":"00a2cf8c3721143dc1d20b9a27ec1ceb600408dc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.0-test.1594209815818.tgz","fileCount":6,"unpackedSize":427976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBbY9CRA9TVsSAnZWagAAWSkP/3PoyvRe9OGxqJOLvxZb\nJ8bFNMFJ2zF8INtGJZYw9ygPL05IcMfyjtOkkdZvgla5CsuG1YDCyWbgdrSI\nJ7/EmrrUulY/HGPdEem3O0Jg6tNXdGJt8Crzt4AIpCnGbvUrYhiDoInkBUBK\nKeUJtgdHL9I6pfPo4KFv9lFajtYrXwdIOQyRndVB6kOSSQt1C1Mpw1zGDrJt\nb90NWVSGw5rH43LLkUQOAYcIznFA26X+hJUpZW9lZ1AXdMT1PYhn/cA84wfp\np/76EsgB7teZ6eCJ5ji7iLH+HJXrfeejHqlUNSnGmMQzAizZLvCcsYCbMIX+\nX5Qdtytw3n5j2Gia9FYLRh7r6vz8il9Bs7rqR2dQb4PbHFV7mBQoL/6pBpqL\neqCOTppOVTFGgZysHIqce4JzMwfKUsomwVsDnFmCGLXxiUvxQ9WwxUz7f+N8\nlAIRj3SDY1LQwhGtLVbADiooE3WIvFmt5UoyjifQchc53aaKhP19APPmhl5J\nd3L3Ow2OqyHvQNxTYp6Wgi44YCLALQqvxJo06VzboclSfJhSGuxj8x3kXHDd\nJQH2YKGQBx5BGhbPeKmMEcqBXBdC0GpKhOggU26WgHvbQPx8O5rNAmZwZgkW\ntSsOQim22PnWrR7EZSrJVjDn0BPWGOBUO2Hotfprpj3yLZfsqzZGR8OeqW7z\nmyR6\r\n=QDWn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoyDFa1olk6Tc4EEXyEqbNO5DgJgaiXldZJG6y9t8U4gIhAIeDQBNHt9TU3B3SOO/PSvdkPWU84h/5w3zCmiir6Ome"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.0-test.1594209815818_1594209845351_0.5232027448043914"},"_hasShrinkwrap":false},"6.10.0":{"name":"ts-toolbelt","version":"6.10.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"ede689c2441235aac5118de112bb56354e6d2a31","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-U/PYPb3FxJJlIs6MwGryi60e5acfBwcA6wFHYCl60e5ObUWxZKqdcxalDzVw8ORivJX0VRBl8C/P/sGm7iQNcA==","shasum":"d4827d2e235cef1479f65ab9cb3e28f0fd4b983d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.0.tgz","fileCount":6,"unpackedSize":427957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBbd3CRA9TVsSAnZWagAAy9AP/1mNAsukKgEjVU6lJQc6\nOIDOH6dmO6Ot27PY1xsONYQO9xvmt2PlaoTR/uSYs64gc2vuceFszXEtctkH\nKXFHk0GFZWXghX1cD5szlnpXinCYekljzE3MD8OZvB3Fvrpan6z5o6yUVwpb\noLu1ndmIIYDBacYTiSorvOYzVi0J91rOqEqhYuwvzOxziPmub8ey7Ni7Qdnk\njITRy0rN2QC7hHVxKZtvR9NVY2SfymdgD09lFp84j6sJi3Nc9kmhID1GSh+O\n/e8N9zYqXiOHurZA08mwd8pykvV8z6txHXrekQavbVgJRT1/nyxIW7WFEa48\nQMb3uwzsWsxvFzELGsWCRiyUpL1t3kTZA1BpBDwaXeJgdt8oq/BfE/B04CX+\nLLRTRJyit1RKGsu2iJevKRjv51VO6hiyGUQtMdmbBcrqaT/Xznd3rjyBTKGy\n8Ees+dPj/Vrc4tgqo9QXYluvPD1pHadF/2aI0fu8YquLdXGcmQ1FJ2iSDAtf\nMGKBJlxAmxnmQ2/MF7Nd0ub6oXv2LxpcXrLteM4ahJQAPjbe+SnFe+j0Ee3z\n5nXoBck64BXTrDEeFXgUqj/speGDy5Ilx4/Jp1VVgV2L8b7oro0AN86uJ2qG\nAN38oPvTCiUAML2GccH+UZhXoMeboZ0acFbOmnE4F/oMwherj6x3XSL+cFiL\nzLd5\r\n=bnlz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKnrDCFDb61VWPOHjO8EhMUiT7R4PXYmizbtS4CF891AiEAjwmNQ3zh1NRD1IxRLZ4Xg8lN89OvJq6XJtMYTBlkHE0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.0_1594210166948_0.2852634122652691"},"_hasShrinkwrap":false},"6.10.1-test.1594214031908":{"name":"ts-toolbelt","version":"6.10.1-test.1594214031908","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"7f0ee8638aa758e7e3b50f4e5cfc341e0e94c52f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.1-test.1594214031908","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Bn7Wx8hsaZFygVV0GNwIadRBfXc+apQe6IqgmK1yPlOWriwmnDUhXf7bERtHx/RTKWzHfSYJqkHcMSh6gP+Mlw==","shasum":"a8af4bd529e07393ded46e97d29682122fb4f962","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.1-test.1594214031908.tgz","fileCount":6,"unpackedSize":428360,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBcajCRA9TVsSAnZWagAAHrQQAJN2wHpiPfV6zIuaL6OU\nJe3SyfOY52no6scVbMhAv9O5TzEGdA2nEvUtycV/P59/rmKy2lhBLzVh0uzj\nn7Xw8WMnp4xb9m+jFIkn36zEa6gTIAjsp+bokELqupXgYYZmbP1nxNpTP5d2\nG7NhiNQd8cz7fWf1S4RSwtzzLx+Vb5d9HL+SbY00PZDinoSnw/PwaJ+0OZNp\nW3EUxnrlJ2m+BdDlq0tkWu4CH4qtRosETce1pDOBo+T9Xh4YOGC0grVFR7fA\nfQFtVZYSz0164m93blJGKn5BAvoa4K74rnx03JL4HiKs0/B5S7bOWq07rsLA\nC4+/PPTFfzisqIiTwFr18uICvn8NnQZIahn5p+aDFaV+D4RBt17OO20JMF/5\nWU+hEwOHvAUkUjES/217F6oQqVIG6YpHfyeHEZdoog1csM8XkM5Mtej388Qi\nQfyQ4EQJvV/bSg7NpT+ywLwCx+FD8ru8doVzEioufvHJuPKisHjLhm0y1CHD\nVAPVbgEBua0Yo8jog7WKIPVWtwYoWG1DNEB7Mh52y/92YaKPuKIggCe5jM8A\n+GDyRjLsPve/V9vD0XXEplPq5fSoy1+Bf7GpsW+AFbWBElJz50j6HIBBe1My\nJ/tVOLI6F+DH7NyIKT6bsqIo5WFbkaHOBc4x3tsPZVUL6ob2jQTPLYIuqI7O\nFvJU\r\n=8ubt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW+QivrftoLLux1SqDBBFDfvjHeFaG6oFzb4oHz24EewIhAI3I5DQl6QMwmwBRBcdwsdai09DqEWRn88W1Vyh4/V4Z"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.1-test.1594214031908_1594214050984_0.0058705985308711295"},"_hasShrinkwrap":false},"6.10.1":{"name":"ts-toolbelt","version":"6.10.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"7f0ee8638aa758e7e3b50f4e5cfc341e0e94c52f","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.1","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-yRPcOXPjUfaUjrVSJ5xP1vFTZYa2Gcop0DjGtIIM1ELSGX1x5/bFIVneBhrh1uiTFBGaXFV+7hsNKU4l27eiOA==","shasum":"0200a0f49a1ffea22c8b50c750940e2db400a1e8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.1.tgz","fileCount":6,"unpackedSize":428341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBcfICRA9TVsSAnZWagAA0+AQAIsE93CyrncTIX+qlDve\nhyoDBP9FillN17SXsPzsaZY/P9quRo8sstINRcTD93Xl3gqJkkjw53PPnyDQ\nAnuoGbxRHzYd99/g4oRzw2l4k8ROTmZFZJluGbASOMPULIkdMxJJyxvzu/Rn\nTBfYwNfL03R82Chm/f0QVbthaaOiRXFgxqCq8jV2a/X8GhnID1QyhOXMygrn\nDMZ5HPCDwdoC5IYIBewgv204NW0/cFbrbUU//Qv2z8fmPMISs0y5mOEaArt1\nvbQ4Yo/K1csiP6DbC7dXdTd4L+3ZEBgeug5mBBn/qnIivf8nRyI7iCsqppSb\ny++WhiZLd1+8mlmaPh3HsjrxTM85J3If3z7CsCKiOhyF/NXvOVtSssDLMtrL\njUnnJkwloHylQ3NQor985EZzyjEw09dX4CyUQWVgAPy1eWfrGFd5wTdV1EcE\nQ3ZkVXibaxt9MeIXJvT3mReEvF4mgzhHwuEIcwqCmJwdLrpEsvqYVRLshBWH\nELaJRSAw6o6/Tk794Gy0yRfP2uTDn47dMN87VDvzNS+aHDvIT7bovQ+zHhqK\nxa7pnVBzhhJir9+bl5ivGQK7a8G8L+WoDalgTvTJ7cAsz+0yL8vfJ8PEqC3U\n2G4X4W2dNXVWM2jBkp48cdK45cX6DyRHMMG+vzX1z61gMQh9Int370hS1Edu\ndHAY\r\n=9t3c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF9BtF/gFf/xr67LIqgJhdSIyX6tv7UoJ++V4sL0opPUAiAVxZRc3EuTnDZeZq9stk2ATa/ZzVOzSGM8nwWWfAVHxg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.1_1594214343992_0.4807354074440062"},"_hasShrinkwrap":false},"6.10.2-test.1594287582179":{"name":"ts-toolbelt","version":"6.10.2-test.1594287582179","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"dba087d70d5db10ebf46f3366d631a406f258fe7","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.2-test.1594287582179","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hEak1+EauJkRQ4TKxafDnsFO6DPN+jPTgmwiATjnSTAQp2YQWjSy4xw23hKN0jRULSm91M1lwK7WJjKsCV1tsw==","shasum":"b4cb17caa7e88128b0ee579ea3215a903341a87e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.2-test.1594287582179.tgz","fileCount":6,"unpackedSize":427925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBuXyCRA9TVsSAnZWagAAGuQQAIs5BJC+pG8yH3yUsMs1\nNKTqLuXa+fg6AllfFcrvUidneKhhTjDTs4TIUtbPAzLmxs0DBBtg7HgktLJm\nxY8BhYeFU88J3OfHAqUKiPjVkAz+37QiNvICo1ABmlfwrMEWyYnucLxQBP1Q\naEgnm13Z1ylA/yjF7QPof/8QrPb7nAVelFuW7f8EowDFZwfmjMsthwLV67Dk\nKmaV6nhhuFEO82fijDqprsJD3KJz3mdGKQhv1AOeiWAEclcFI12nJHfVjlEp\nS04qVBVbyeJyJhU70ja7IB93D8Zyol27Hon5b5cfH7ebteJGU0xGVuioUmRD\nzyWQYoD0JIjeDZc1E7RMqPwr7DkILCjKRB9zAGn46K/6IZYHSHTmsKN65Opy\nrslf6PPY5AHyViHRV+GWYe5SJHvkzjS9PUD7U20/zTR9SiNcUK4j3UhkMcXi\nf7gpRKbBvkSWBRRjm7Jo8reb0iSEZ0BXIrBfuThOq461BHlpLkqPEiwWAgbK\nQ+rThMgpT//e75r5JSdNtga/0IUAjbxeXwUW/AiKEiG8rB6/79+LxMYFSRy/\nh2OSnnpXKtM2vn88LB1fRUiGz0w2/RDSwghwQb79QRFDzKssxj61aDrdlnse\n4xJkzG58aFEbPslT16j/hfql20hTg2I0Kh7ffIhMq2uOJku+GYcdXbEpXZ4i\n5y1Y\r\n=ck9E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmCbv2xlHTrkSAq5Tc9CJw+e4s55yBUcuMBgKoQh0VPQIhAM+QN5I8WG/cx9GWlOgSGh3B828fcflf0nXHpXAWoqtD"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.2-test.1594287582179_1594287602047_0.040884152945267704"},"_hasShrinkwrap":false},"6.10.2":{"name":"ts-toolbelt","version":"6.10.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"dba087d70d5db10ebf46f3366d631a406f258fe7","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.2","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4fkh90l2SfhSJ5OuK0qUl2DQ1YpDlEeicea/YgIu7doIH4CH3NhhXkOs72cZrpJZbwyOAk1BkG0ZNzoTIRtRKw==","shasum":"810229702996c7a6d292b96165e61260f45a1fdb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.2.tgz","fileCount":6,"unpackedSize":427906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBucPCRA9TVsSAnZWagAAkQkP/28w7+QeQ5Nb7apyN9j5\nIjAadYI7fsTEdGBc8kiIXO1EO7hhO//6cAK41D03MpNT/A1HYoSbd8E2Pz9m\n2ckrWrK9q+DA7cWbcetUBoxJPqsi7pT+PWahta9k+dSxs44BPK1hvH5epF/x\nrgkq6qXxN8VHDtZwCrLWhxFS86Cfyd1DclhkI+wUlktd27cm/n2GeIKqYCh8\nyiPB8+UtGoAgHgspzr7OAMX0y+Bhm6LZaUYDpTy7Yvr9+cPtVEMnVXVWOjeH\n6ZeYeCdDehsNZlXSuxyL8+DLb11ha6GDLOfRGjojmJ3mDC4EkfPyLF12RoDt\nUD7xNgxKPAQt1eeqVc9ZM3+FcLf71P3PmocLTH81ddQN9Xw9Qt9vLCSmBr6f\nbFvu1T/CaWmn7+RIJGC9jyYZjbWhnKjYlzjIfB6bHHX8Zpy6+qMRsHwlTeYF\nafvdmBOstdeMiD/t83ROg5wjH4h0a0ePUMgrcgXmui8Es2HbhAfwP97rlMw3\nOczRsLjJC1zyzVFt0LorFJRORN3fxs/2gen27DEk2f4oP/XGELPqcyxVXbMO\nTn+KyBs1XhKNIQnFyFeCLo4RQ5RJA13KsnXZQ1bEoXfPeG7gHaNhZPUKzIow\nf7KhIKzlu8PfNMdmGjsW6Jyvo80jgnDZm285xygJROmnyAUqQGkwZPopbRCs\ne2Zd\r\n=3NSM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDUf1MqwnCVEDnz2KYOnijQgDO3c3mRvFcSyYbGt0PGQIhANTwEQrNg4ptl/Sat/pN/DhNr7V2K1ehxmz4V3Hqtiif"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.2_1594287887444_0.8850281727727047"},"_hasShrinkwrap":false},"6.10.4-test.1594303670274":{"name":"ts-toolbelt","version":"6.10.4-test.1594303670274","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"bc511ac94e4482d2495c4f4a3b5de7d93d6429b6","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.4-test.1594303670274","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4wVYRJqRpg8JqvU0HofiZ75woU5RLuYx7fO//0Zl6IUsjsOOEhiO1+QzKsxnPvaDw6NMmWbukzDXafoqK5Liag==","shasum":"a932851b0644fa5d46dbd0315448d97ebc9325df","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.4-test.1594303670274.tgz","fileCount":6,"unpackedSize":428893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfByTMCRA9TVsSAnZWagAAn2QQAJ8PUy8UbRC/PuQ1Tk9I\nhpwhm3YDJzTTXawk8LXmQWrJhZ52mFfzydrnm3mFDRcbVbK/6Qn5GCYEZ1cF\n8eYfUgZ5rTNs0Ez69TivBd/L13PAJd8sDilwaSOEuNdWWwO9BJ9rCS+mjXW2\ncAoB7W2AIN9AfMeshegpTfIX+HFFdNMejirGZBME+SNcPRETfy69VQcZA1zw\noClBtkHXgktXKmlrZQFidgzLqAcTCPPlJtwvwF/xo8tBGyrSKMSn76FVo2Ea\nZcxRYkCO+4tPBU/YwA7bIqnDWp2vsO7eYIwWoujzGzeVnYC8mqpaRBm1znk+\nQNawaZ5gs/zsktDgCiMQGZOhwITcg6u/NiNcpWgJHJrxsixZKeMMnK48mQAP\ncyd0m2FmxEXsQb3vqHuVcWXCQgwk6rISt2ZJtVRBsahhFTgywWSz8HbqxOlo\nbeJxcHr3W273j6sf3LcGH7KhUBphlT/aPTut+uMw2b7jDS2HLgFpP0fj73tY\nnQI4KSYXHJ8UOkkFAs+4HWdok1nN2rASmeCOTTZ+64ZSbvcOLtYNAmKxOotM\n59+0b8ZqIAyQa6vetHdjna3UrWZUGL4Zxk6kf6ka/z+Os4uDx3iTOhlnfcx0\nSzyAQ8C1qVuVL9A3F0+6Aq77NBtqFKoVaJJiLReJX5SVK7Ee1bTM9gy89sqB\n6Rvg\r\n=40KC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqTVy56UB7ESNGNw0QMhCLi8KN9JqBtp7yxvcW5XzQnAIgIwnig9EIhtHndLAGYh9dvRiM1HbLpHTHhN5r+8Khs7E="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.4-test.1594303670274_1594303691311_0.19612671944862625"},"_hasShrinkwrap":false},"6.10.5-test.1594306123351":{"name":"ts-toolbelt","version":"6.10.5-test.1594306123351","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"de1f226d81904f7959d7c33b11a8461002b01014","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.5-test.1594306123351","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-InF2Y2q50lPHY2a6Tlh9ojFiwKZhnMUbg+QdURGDIyqQL77eHa2EJEBG4zLwEUysoEUsgHHX3o6xvCt3OdUF/Q==","shasum":"b7a3c9395ea7562f61cccaf84f8a2f5263396ab5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.5-test.1594306123351.tgz","fileCount":6,"unpackedSize":429257,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBy5gCRA9TVsSAnZWagAAW4IQAJISAJKUy0x9tPnbpv5L\nE6fSSAuAs75S552kw/3F/8b1WZGvjnsoNEPfyTdLUeJGI/h692+OLhAKJd3/\nFd5DkltAMDbL4mHlE+UcAADSXQB8FAdK+yf3lwGg9J3s/7IKugmQV0R+nxVT\nxq7GXn0nH+PMnCs0ZLu9h4ov3LvpImd+NW8K40OliuKphc4hfaqBzxMsTpg1\n5mmxp4oHlc3bOW/TwrhJtfQiRAx9n9BjBB94LFSsym27urhF3cqxMWqTzhu4\nCp9f0k+jJEzxRBIBkSyKXvtmfqpI8cVZfULDZEqr4pzDoD9d01/m28HfcCD7\nRft5L5ZNzruFaPMnvcojx0HF+kXZmE+fZHSZ/m9XQN4O/073tVohi0bWVXaV\nyTQPqzfGVmjDlzuNWR5GpJTtceVDv9v4M7mVCDJ/kRB3vQIr2ncwWUOCe806\nAS6NikrrRbmmG434nF0Cix7LchsiB6S+Qglw5qexNBpEEwXstUbQnek4Z6N7\nn18xEqpPvDGXw85LGhBwqEEQXcAL6+jp6scSzrc2DfB5srvvNVjXSjhqfwzu\nQQk/6ZzkG9NzxvxLpFl2M6R6N9ni5qv5v/bLD+dsZxbGhVbxJWjqJmbkk4p8\neHT6zz3rzLEc20DAiv6Zfs4FwuNnnW3otJFLq1ZEgI9Hdc9yBMKjGCvj/v9q\nHTqn\r\n=ZNDF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICGHqTRalyptICZL/QgAkNjui0djUlw6ZUxbXn0Hc/BfAiARl9HkT765j/v6xPHAOZM9Rof/qSon+HWCE8aqVEURpg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.5-test.1594306123351_1594306144290_0.058209802965177415"},"_hasShrinkwrap":false},"6.10.5":{"name":"ts-toolbelt","version":"6.10.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"de1f226d81904f7959d7c33b11a8461002b01014","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.5","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1bx5VDaBHv3jsGzL3sYE9/qUDCu7td9vF2Eyfg/urs8Jalcwt88cJ1QL4xU8w/lBZkluY+9ylyolhtwyejjO3Q==","shasum":"db469f0ca8d7469f5d243dddeb8c429ad3c716e3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.5.tgz","fileCount":6,"unpackedSize":429238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBy7ECRA9TVsSAnZWagAAY1EQAKNqXN0OCB3J+piQv17C\n6G+hlHRvPbx8pZwRgCLhtiD4iCU9a0jUiaEDbjg8pQuKoanWoUKm3+/Z9dXC\ndRsoWRbdykZ5PN8oYvRe9P44foRAYQLgeQIxzV/YbeSIMLf24vnDLh9aALcG\nRKccf3pm5UuMFyZRGkwvJAp2okPSDVbKPu6MT78nrnAmEX2a5HdIE+jFAPQu\nt1j840Nztel/Xy/tTGzvwSXLY3R81JWsFNUl107wqCBXk36r4ugls8rwiBAR\nUXsO/DfB3kEGzsaNFcJLMdxHiLIGGj6X2TmEuPWNTT+6wxwEGaIFr8G87+lT\nUDemfnXr8kh9oLRdQqyoShArDBksgAKfYCpV2Q+dfv4Gs/UKudtc739BuOls\nJBOspTwl5IwZWOVhF9WJOQUlZtNnzhKes8ecHsUpPS5Y2Zkb9AE0RfOzgOVp\nOjSZmIstCKuL6tFhuYBnCZnmlu0n8/H/Q0onwxlNUqUJsWmZ/a6c8V7hJsq/\nvAL2EVqe5K14erC7cZMZxNXZVgTS7/akRPR4jEj8YOavyk6C08u+vDYp/UMn\nP+l/a+R25NH7jRtB3sMJweuJU/EXMBrRWetiuJAeHp/w/i+XY0uTfG4TPQbo\nT59RmdwQrcWQ6BTsux5spQhutRtZMIOPthzmab4RWCgWSjOiRvrT7ujUv7Mp\nHJTG\r\n=yNZA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpNB1FqRY/kUcr1Qhp4jVwUMIbGEGr6p0ScHUWOejxMwIgBd3d9h3hTSRual4FU5fJGDV/Bz9VIu1046mnzEObZEk="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.5_1594306244353_0.1157416394023465"},"_hasShrinkwrap":false},"6.10.6-test.1594306421818":{"name":"ts-toolbelt","version":"6.10.6-test.1594306421818","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"bdaf18bb44af32b3ae989a57cb409cc7db0b480c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.6-test.1594306421818","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-CddtkSGOiwaW/fFcZeA8Ckfm1QSwYgrIfWpmrC0DyHY9CBYGXKjZnlSbRF8Arxq6gOGkLo8b1b8G9CsS9Mhy8A==","shasum":"f0bee9e770dedd7d1421655757da0c46f23ab3f5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.6-test.1594306421818.tgz","fileCount":6,"unpackedSize":429488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBy+KCRA9TVsSAnZWagAAhs0P+wWvztqfYRbXl73JLle2\nquiO3gS8S3UAPEvPwTKJbSrzJd3KgLUgYA2E/GY/ILPmzFtLeTUgpP7qNwFe\nF5fpG/thulC1jIejuV6KW1nWxme9bNcZWVzovimNW/8MZJgiJ2w/s7VRsDki\niT2mnHfpt3ZmYj+5SuhheNb7ezlVAir+XAQELuyCSS2BjU5aidrrRx/W98zK\nxdRQ+QeapATk0VAhzy73By8VwSuPAGGBeJ0PHPV2uT2NDMbdV/q52ABCZlj9\nhALK5CQg0OQrCroKgShdCpq0webh5gSTjFHjdrFeRuYB1+/dUOCrSY1FZLNc\nH1tFKFj2FNMni25/g3IqyKL8txYQihDd+CnLL9c3NtdPOBPJYxWyehOILOlb\nqvFZQtXthQlFTiEqewt2UiigA36BJx03YX/LRz1PlVuBxSuL31O8He/C+kIY\nDSIk51d2JPsY5J/Mp2TPXqaJmq6exL8wu25lqLUGB3NV4fF5UTOPlTe4IHD2\nJoHzJhK94NRsapJpIcNyZzGS/gkJOaQ5cf/zG6kyHzRJ5t2U2trIs6BAEvCu\n5k1CpaPUJxsoFdETwMln3GipxgLQHbduvQV8n+oTYCPf11TeInAj5a975VMG\nfFRIfSajvmhozRHrCG4xK1T3GuGKcQlJ7E+6KwQXxm79Lg/te6vWgmF9xjA2\niEIO\r\n=YVkm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEXPcMj6jCDQi8IdPhx9eqpPNiOWycoCoLUFDlNGH9jTAiEAvEL4qmYVT1EwUpBIqkwkDDJ7SYqFddlxc4Zg627vFDg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.6-test.1594306421818_1594306442000_0.7340878162270308"},"_hasShrinkwrap":false},"6.10.6":{"name":"ts-toolbelt","version":"6.10.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"bdaf18bb44af32b3ae989a57cb409cc7db0b480c","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.6","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tKsCCMpyISh50kHFkerpxABgfQXEWWPzDb6ATRJJBCKK34nSgmIRbPoeJBh+ETdYauokQO+DUIHPPloXlp0yRQ==","shasum":"fb956dff6e362667b79ed9e7dc639976f7c7e390","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.6.tgz","fileCount":6,"unpackedSize":429469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBy/uCRA9TVsSAnZWagAAHJAQAJmhDWR+jvYDH3b58mVt\nHVeeoRbhx43yvXdpVbCSpze/mvetakQf6Nb0YlBtGh+Cwps2QNSxUxXr07Qu\n4ZzW0Yf9xYgjrZJmV5MlUvyhRv3t8zfENC7Ud7a+NJo9TQYFUyN4ULj0R0yZ\n/wxh8oVXsye1IuQAC/d+6wifSPiEgbx61FcjshlpqC+7/VHiKwM0Kn0Gfiwx\nwhGKPdQ16ub5qetivAGtixZGfHpUtfzVSCr4+HWNFUfHTmC3Olqp1kRJa2xK\nYE6YqiOCRH49tblX9s4s510jh8/2/u91EaAe8IlNkK4ajvR0AFWa5XRryGkZ\nCuqywZzL2l+5gzHWvyOP3dpGt6+6Q01Kor7Q+cUiWdSKzJXCRaAgob1s/NUY\n+uvmCqZRXufUbpSUbovcsCz1uglB1tJgk/CkDRb9j2qOy/MaRhI5/QHq3VDs\nZHAxDWRFxkAXrI/1mDMUxy0XaJd4LnN3EsAyI9+4swi4VzHwrKZ9rz3ga2Hx\nIjWUnvQmk5EuNcusmQxKntGC8itzfiecaeU3gJtNgypeTXJ4caYt/+I/3n9G\n9Jjtnyx2CaLM9x9F8ddgTemS1fgebM7xKPuwH5JIRVQl8BJd3A9AkfDmH3W0\nXyrIUqsai0YjiCc6lPQkQx46Jfpiw7RpgUe0aD14RBPmHPxuZt5pjItcORV0\np9Wa\r\n=b++z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBUDerKEvly6t0n2DMpnYDQVaD2DnXW6O4K4QSBVMxObAiAPgqU/cMfYLhFwgOiKdsDu3URka2fjrT4HIEBk8gSiYg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.6_1594306541740_0.4906519543435568"},"_hasShrinkwrap":false},"6.10.7-test.1594307402767":{"name":"ts-toolbelt","version":"6.10.7-test.1594307402767","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"e4eddf50bb0b1a7826be979882e71a68a83430f4","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.7-test.1594307402767","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0ki96Q/3LI0DeU3IBYQIsQn5Rw2wqi0yTSU0W17Fi9xR/cLSyZ8L73QSmVCKx74DjphcAzC170sjKklpdWnVhg==","shasum":"7c2a53b2e77df682ae0bec2ef6fce63a0282765e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.7-test.1594307402767.tgz","fileCount":6,"unpackedSize":430354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBzNfCRA9TVsSAnZWagAAnOQP/iIpUkbLm1yb0buS8XP+\nqvqoxu+GPkHO+snXMN3Pc4wx8yUhU5kAuBD6HszQBMuY4mkpHkbgjvwDFCp/\nuMhINatCQ5JNuA/uJTk6mYJRPDdbNMBZMXZyaxIctdKFBRvJAvkdbt2R41gg\nTvFY53/JfnL29GVHC3jECM9pvPBEKOe2mrNZeWKoQN4265Pd4SbFzPoFFxAS\nD7LIUk3AQgDFkFoge3CcvvqeJ78cRvjWI1oOhMB5Uwvd9zu8kjHRtKL54KdZ\n8yu6UwjwjuynQEZ+iewluigGJOglPgv/Jf78/olEN/WIi6dtaGCwanSL5EVS\nUQ9LvIYi0VOy/kHaQtNYduUNjb5cNwNZO25N5un2CLJsP201R8mZnoW7ciSM\nlpgBd/y4K6FHGE2c0dZ2k2/G1kpVqwuYO30rQxe1X8/HHN29vxQPpLZxZgx7\nVqfPHlO+Dekn2oDKea5MTaTm06XpJXf/48dVQDC7E2tqBbf3B6o9SK484zNp\nkdzidNxH22GgkMFNPAKcxicsCAKwE83ozce7pg5ipjmIpLwhA7vewNYEfWP0\nrNCdkgQwGTCmCccM8KPSAk1h6DHUxJZAnYWl5aKN/mw7bcOfyNBNp45YabcJ\n8ItBfBMrKVmQr/0Dae7eKDFbWoBrqeGL6J+EFFx0r3x/EvvI7wQRogOZ8QeW\nTH6u\r\n=VarS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDcgv7PYpmabwy2RLMpyQ0i4tCnsrvZxfIjigVTyg+IAIhAIklxQDgzykUQF7ItKoVWgb2whfFmRCAsB0d4YCuWDat"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.7-test.1594307402767_1594307423362_0.8160367300194424"},"_hasShrinkwrap":false},"6.10.7":{"name":"ts-toolbelt","version":"6.10.7","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"e4eddf50bb0b1a7826be979882e71a68a83430f4","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.7","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-z77VyGZk8u5BHfFXahgKrkm+HGns9WtRkpoafD4wlGb69VLOiM9DPoN9Bz+vSMERO+gqhf4X5cZdAKWYRoyHOg==","shasum":"ccc94a4e8f96379d4d9dd7c96c3ea0dceb01bbd7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.7.tgz","fileCount":6,"unpackedSize":430335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBzPECRA9TVsSAnZWagAAQkgQAIG0UY1KR3H7TSsQuA1X\nWlvVB3DvnUqkhJ+SDTvNX+dqVI+9o8a1Y0Kq5esuBPsQ/Pg6Slk6qnP1FSrb\n2BNMlzw1Kw/daVuyiVhOpy5VY7A9Q9kHXNmmGiP/qL/IQ03bO5ZlhV65mLvq\nXWPNwsQ/13nEZon4po7cMAh8FNS+A2gVnl0LFNIsCw5It5s71jbBdUUx4a2T\nl2p0lL4+ZGhzIRlfG+c2kHolrZoEgIQqAMehQuhZhvGtgWL0w31eWssHbKEN\nLAra7fqFz+rxLB2K8SYaUmY1YTFW7sPsSqwezDRfXemgosgUadrrZMxeEWSF\nDYpf7B5tRTkhknPkNZj4iBAjXEkWj1YJMnDD/iBS47UH2aRrF1GcXt0DfBV5\nOFxouJhgyW0cEYXOCDsiHpd8lDDUSQ4LJVOZW6CVq8WkwbvZ+zzru0NlTW7O\n9ajzX9nIw7rrf7rg2b5qbhRn+wofWo8IfNIs4v91xIpsIIwwDkjVsz5MFwLr\nPjXjv/UDI7A4yFlXAt2AMung3wK+yye8+JNWYYdPU6OPDNz+KCymQSxlNKt7\ndJfCpNeOkIQSUsQurYwhW3b7r8q4PTXSGYM1kHN/F5AcrJ/UtuLCEL9Sqd7T\nO5gCsAH9AYiXzw/wJPSI1BrMXNQm2Ntu6+EmuT6NpGiibfjacp86+9vMZEa3\nQAfd\r\n=xTdv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNgVhewhpwKmQdRLI4uJ7YMQqyTdAvrjm+MN1HFnDVCAIgXjKHhlspJa/q5ueqJzgSO1kMn7fM7rzwJL41EhIDwB8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.7_1594307524461_0.06217383501570706"},"_hasShrinkwrap":false},"6.10.8-test.1594310585957":{"name":"ts-toolbelt","version":"6.10.8-test.1594310585957","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"0be366be581d74ee3cb4adbd4440f2ae3bb30a6b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.8-test.1594310585957","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-cJ/eWiFIHe1t65KNijGpGA41cYkvNutlsrSu/KrRFBwht3pAl7+k8tLPumBO9c9Ob9a8UGn2zbmrk+6sIZM6Nw==","shasum":"42f1cac830420effc447f9baeace539f40b0593a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.8-test.1594310585957.tgz","fileCount":6,"unpackedSize":430986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBz/QCRA9TVsSAnZWagAA2VUP/1QC+wZo2QoM+S9V2UXJ\n7kVko0Bra1Hs17cqOBK/EtppyBqwFAACYaV10ZW78bCZCbdPHAEEjggUXctP\nhMxa7ieh1yIlUHLQwZsbRFJ07uZvr0ozMP2l4ih1FbRqQ3bWgi8JmUjzfQbz\n4Yim3DfUdhrtJry2W3EWV1kiZo1m2+TTmro6mIFq26f8nJUZ7+3078QMU6Fm\nxwRrgAxiCLmNfJrhDctG6KjLNDx/2s5Rdil4jEGJ/RIB1SKkXNZTXEFyx04k\neydagzhGNqANfrYjUqCWSMaJhYBIMj0mNsrITJcOULLhDyS+w4B3JPm+Ow7b\nat1Wqnvw9WBX/5OsgTdKIfxhISt0xuDR8g5WZBykanY8DN6TgC3BkNAKBd5M\nVIwJz0Si7Mq5KszL7+i0F7xvNy/yCgiRwy0Uyp1bWpOdROsTtMK9z6JK4deC\n2Cok/P98rQ0tPI/l3v6mKE5JFuoXhILhfFqiQufeGQb/4++XB12pB2s3a1u9\n/o1n+AVAhWrwFE4BHMpvtqd2F9h8FCuZPPpRvyJpqgMEAFjMT13md0wipRCC\nICBXjL+0wbxvFeUTR/1dw6QJSLFL4QNIjC+HgLCjusl1m2wQUs3BqK00fXWP\nwsx+v1vCCac0CPjasx6WQ/P8GjdLYAVvMwKBaSxAOEOOH4l7j7a/qfM12vFP\nqRMM\r\n=Quhw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXRWHhDvDBavlYmY3rU4r79e1V/UN49w+sZdIQrUYs5gIhAMKZ4PTj6tRqyESmfo2Y1b1W/z4rKkAuYbe0TdTw9tbD"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.8-test.1594310585957_1594310607356_0.28200433207888076"},"_hasShrinkwrap":false},"6.10.8":{"name":"ts-toolbelt","version":"6.10.8","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"0be366be581d74ee3cb4adbd4440f2ae3bb30a6b","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.8","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-j/zPNe2D1dosJTCzjurB66Kvk995p2AsspdK/xVJxpG00t2zf82HaiOXM+UeJv3KL98qTby5JwzEHtwKearKYg==","shasum":"c26fa0a54547112669c0a88b451785e6f8563d65","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.8.tgz","fileCount":6,"unpackedSize":430967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB0EFCRA9TVsSAnZWagAA1DUP/0IivYoZeiTy50KzpF5d\nP/1EMZzqXpirm351Hs6uw9ePSYT2GtkIthU46AKbzzFRSXSWtp77wGT0bLbn\nXSaYxkEcGU5NeN3sciLr7Jy06jtmf/KjiTzbpWje2cXiSL0l164wiVTt84S7\n7b6NGtqfdua7HSyqhg3nUTXCdvS2CpsysPkAQEoaqKSjRIY4Jb946hzHghsW\n08zgdKXWmqOoAsaGs1zNIuNaL6uRsHENZhoy/yYxrOMc+OQWpvfKS8l8iaF4\nSqazHNsoilvuz6J1m6PwMWEWgWPc2paAvsxqdw9vvxV7/HccAH0rRIFcIfx0\ncA7ORlOdAhNLg7uLmWD2LJg4aQSAuCzVjFKu6wqLKjPML2H95wwkSe5XYmqv\nZO+xH+UwKje+wuKMMCQA2BSPrrvMAFxmzcFioOvX2DZu3rg3OBfuoZXIcmF9\nqktzsS+KQVOG8CZB/G8PyNC1BqyPWjebwDC1Beptzfrofxwpfa7saafo9PVc\nxUVMh78657tu1oyltUXl6TtuYgSnAp1jmyVPUDBPw8K2PgStN5WUrK3tmkPj\nhk3VnbqL67GBj95gvz8wGicyoJbReuvx75WC8Uy4vY/UrusETmtE6NIucryi\no37r/2eYNOtOZkZbD5eTfU7mt4GFidfsYp6vm5HizmnSjaZBWbn33xYjh+M3\nzBEW\r\n=acj1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmTWsuIVthR6COo1kBwJ7KI/tIlMkk+/qeoMWJ/SfAywIgFIQlh68+sy9giKJ/nwmG2XPQuEuuqMeXIXu6BhSpX1E="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.8_1594310916572_0.1973028402189252"},"_hasShrinkwrap":false},"6.10.9-test.1594312222756":{"name":"ts-toolbelt","version":"6.10.9-test.1594312222756","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"01838021e907a256d011ddc9bc30203a71c2bfd9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.9-test.1594312222756","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SdiFPHjSzDIvltkqeZhKCEKIJIMNcceoeUDZgwrMm4XepN0usFdhOe0YA4kEl40jPUvTb75jSVQhDf566fqIGw==","shasum":"fb08333117fd26ae47c55050b79f9d2e348a21e6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.9-test.1594312222756.tgz","fileCount":6,"unpackedSize":431301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB0YzCRA9TVsSAnZWagAATXYP/jjyVhHrEq0P2t1WtRMS\nwJrF3M8am1X1Wg98++SKHDCyiDJGnsuni0TasBRlVB/QDcUKCoAChwlOjQoh\nYnyQ49XMGLCRwIfvoNvPYiGaKvN66vuXJyiLmpNXIX/XBuEDWH2Y8ibNhtng\neQs6xF1upR/WNjfuG4BRsPaO/o+GIBvh19z2DDcPerWvg3Lr0BXZ/3ov8fQl\nDQKiFVtAI2MWt33lDBdMoIJbli0p6LFFFdaMjW4iX7VmpAZ+FdUoFw9BUOWH\nn+Ef+z3tdnu8t9QKyeZ66cWNt19/rI5H4+h1srvFGW/Eg5sdMQQcTrVehnCp\nYKS88cdv5S8vXzEFlRbAPvKgBCcoOSLktogmS6N/vVRkq6/+yT9rlq773vuz\nkL1wrvqV2Y3OMloAcmmqtibPnCAt/FE9iVjEO+dkMkHCtIHZZwVheGhXsh6z\nOaId1m1Xf1/5ikb7ahSsa95Vzsp7DEZZaJrm8AOY+4jtrrgG2Ij8QZpjdb7B\nfdIc0HVQilLhBEWEGvTCfAvlTRs/UKQYxJF7PPWQEDIhbyIH0IMs5N0vZM80\nmfWJPmH0G7bGnuwv2lDMs5MbxTn3fjBF4XUeUuzmq9vTOeR0+nI1o7iRy9ex\nbLKFL3sdoGYItCpTM8qXhBOD6rdbexojZKEoueEobf67m1gkxUU1s0K5kU8w\n1IYt\r\n=X3+n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKBzMjt/N2st8ZpfL7IJu/EXXT5p8SZdpnlRmJP4WkMAIgUsE7/pvAovqPwZYTyM+3zMcI1qbvAWMCTvQaKc0tE7Y="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.9-test.1594312222756_1594312243044_0.1404608335597861"},"_hasShrinkwrap":false},"6.10.9":{"name":"ts-toolbelt","version":"6.10.9","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"01838021e907a256d011ddc9bc30203a71c2bfd9","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.9","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-uJbn0QX1kVu/eugfUuBOtHi3YFGVVK1C9kqzTxVRUDqf5l93XOwxmGxMbIQb+s7tW45uwyRUQzqBfA84m1ueBQ==","shasum":"b0b2504271dd22911aa919d55427e6ec00a13676","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.9.tgz","fileCount":6,"unpackedSize":431282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB0djCRA9TVsSAnZWagAA9EUP/iOcu3Zg+RKnIXSIOTEw\njSR0YQOd2ULEcVbpfSE85yzRkdkYDqcsTwg7KgoT+YIBEwXv6mfTNUkXuPGZ\nRpljbRzRfgJ5WOOyiMckvE89crVazFgkaXldYwmM/eamCBuJInNVhKREau/D\n1ia+aY5eFlgqJEl4M7v6R1kclZc2l2/fP4aCJ90iEPnZMqZoSs3e3JO+YiGd\n52nGE9tP/GXO/noom0gVhE1xAc+LYwE4dPqbSlH0Ul9DMZOfOwJCCJIPUL7Y\nnuwuKac47wYDaVJBKkb+TIVx6j+SfIe4vmuZ6vKvv043sKS04DWVnyDUV41W\nPP0vMpobQtc/XuxOWpKLdv/H0B1gcJQhCEZVclUr7vAF665k3FEdS0B3uuB/\nzN2S8hsuiUnm/QK1WgR7prm3+MaKC+ysLkC5xWWlQ9V3EP8Qr58hyEga+vAn\nkifXLNzuOOhLcXzrAiWl+yT8wM5LjYeww9QUXnrV6jYgQn+YrNnDc83rVKWG\n6RrOYHexRHAziMlFIxf2tpZVabMU471lqkgz7sPH7Vx2p3G7DZlZd91/oOWM\npTQnmwWnm+7Mhe5M+D62awV1/olEFv/oJscekgFqhwMqgWMilq7kbZ5zCm1L\nKZ00lF8OLMhozKZs6IDF2nXqNQaxCi3FC+2zxIAYOhroyLo/IP8CS/9BYKdP\nIY4A\r\n=V14W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHuQGKwjKq6JxjMNLA4c4i+o02+qRc9Vx7nj4C/Fe+u/AiAaye9C5rAIaS5n6RUqrEkFRWz/V3IjjAkBD1jEFoqmpQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.9_1594312546860_0.14176770637874725"},"_hasShrinkwrap":false},"6.10.10-test.1594314500330":{"name":"ts-toolbelt","version":"6.10.10-test.1594314500330","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"7fecab32e5c388b42a9ac4d1055fd30418d33dcf","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.10-test.1594314500330","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1x32mxlrhyIzLzKVIqZE1Kyoyda4nfXDMaOJHjXATFdpdHLuUz+71Fqx99cNZ5DvZyI3r+B/WYtc52RgAOVdug==","shasum":"7b7db09fb4999122a08ae547aad1d33814268405","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.10-test.1594314500330.tgz","fileCount":6,"unpackedSize":431555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB08ZCRA9TVsSAnZWagAAMoIP/1HLkdBxiJYWyW+JMyfv\nCzp4ArYHCgxezaU60m8m4WEBj2wzndAb5PU1UoaX3lR8jk/qZvD/Oadu+fxv\ndd5iS1qxdtQwWSbucaKJPjQCxMHgtEpAuPoROjq209DH8/vuNqIf0YULzsQY\nWXnJUFZrHqIhD3j2EPFCHZ0OEEtfIZy5KUEv+2bR4tZMU+4yfu6FMsyuzx6u\nd83BLXbY36hY4zDgPpapqa1x5XLyagERBQg6d1W5pCSq1iQf8qFE2x7VIXUy\nj32K72yBcKjs4gdI8V0hDLtYlcl/8pkuNyxBEHbN2/rvzo2oxq33FnzdJQVU\nL1JZLWX3h7yNaYpWdNkQnhv5pARhDQlI5Nae0dJpeOM3A9f6HQCKAUUPEIY+\nvOSda3iMwDcvI5Q5OoBs62J8WMLE6KT5KG39NA2+S7zRAvwd0sl+u5aha+rN\nTpRzwsQV3DNlzguPTkLXgZdS4VWvNBFe+5nCgsmTg69YH/XblhUwjCZxaVjw\nJqPGsTd+64zih9itTrHu7vRN3yjpN29KdbtVEONHl1tPgTa/7CkZRqyAuZsP\n8xTYtLu2HZlVn8mNG6mFNrKaeQtZs/VQODNnWlWZE/qFll4CWRRJ+XJd1nEM\nnWOj3cDA9jrcAdoi8fl5dmFeWEl3fO9aHQfSaQ8erkZRlHwCerRIYr2xRCZO\nTxTX\r\n=SFpj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2AyBeykRchy09KZQv3Z3jsJikDVgGeRexkd07lsAWBAiBv96ld4Odjq35XSz0ybt4XJoA496dznbov1c2rQ+KQkA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.10-test.1594314500330_1594314521275_0.6775936338310451"},"_hasShrinkwrap":false},"6.10.10":{"name":"ts-toolbelt","version":"6.10.10","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"7fecab32e5c388b42a9ac4d1055fd30418d33dcf","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.10","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-9+e6QVuBzGzdUmYMpv9ZrYnaXCQVfmNVmmwUfCWKMU09C65WQxz62yGcYf0HwhHGwTErtxh7JwtrNQrmrI7kjA==","shasum":"89384d8853dc13ea31bf7812e9e6864b8615f01d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.10.tgz","fileCount":6,"unpackedSize":431536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB1BBCRA9TVsSAnZWagAAKPIP/R+8IZMHSpmwqkbHVqSX\n6dgqgb2YCuPaQ+Bf4O2+3S7s+UP8OR4ZKZn2hO0z0xzcn6IxZ2m1GJXl8nT0\nl0TqPs3cxDWrtPdQX0tSke7dx7L9gJmljuMPHcb1poS8Zt+xuDUWHaREtvTw\ncyZpQ78pymSVnFGlO5NI4qWkRkZp7ibWXiQeXVe5UKO7qqjVyD49JljjI7+L\n+AcSKtqX2WA/ac+50LkXDzkYCHESgaz9KOmQegnMD6SW9RVB9bRocpTyPi4i\n8yKD0rQJ2WgHAdfZap49JFtUOrD4UydTDcG/fw5YP4ASnIWlRTV/PSeAqhOy\nucg9P6c1UPlrQIt4N0NdLF2u2rfccBBbh2NsViSyVm4xUI2FWodygak/IiJF\nmrnEt+4KThUFS/F1Pslqusv7Kv9CewIHl6wThIU8EPwtIfyUwlioGRKoP8Ak\n7cN+7yJK+GxwG0SXUAe9Kq/ntVSbJ8u6EMc0N5KWFHjpatFwu80g2D1Y4JGY\nwSZmpEU15P9/X+3jofOibRJSXV9/jhrnfV89XP1XKqXQ0rpCLlqoLksKWris\n9OwkmUEQSZFQbhsc8sGtJBt/cDsr9uesP7gdGqEYfGEUPNESFWnDFPJtqZ1f\naDEpZ+vetXTWRULgfxhF7ADrtlWvgnXYickm4tF54ih9+ti+lDlLyoXwSCg+\nMcM1\r\n=Jc4t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWFfBH7VmOrrKa9xv8a+sXgvUVNYUxDAfpNGj1pi5kOAiEAtBwehZHoZ880S0ETiqDg89tX1b1yRAr5GXMT7swR5SM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.10_1594314817346_0.36831184712207965"},"_hasShrinkwrap":false},"6.10.11-test.1594323150496":{"name":"ts-toolbelt","version":"6.10.11-test.1594323150496","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"ec1aba0779dbf64553c560dff589720715a4fa2a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.11-test.1594323150496","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-CKjqMyRAA2zsEmkEuY20mBDpHl+WnNarS3BdDgpNibImD5LU48VdzP3qpg4MJsmpt5Je1X2w3z31/I7YzNj+wg==","shasum":"16b3d76285aacda6db78a3f5a2e1d3b4fa09bea2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.11-test.1594323150496.tgz","fileCount":6,"unpackedSize":431854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB3DiCRA9TVsSAnZWagAAd7AP/As5grPU2sJS9nhWh3+R\n+g4PM3K6nIRCJEYbmBs9DYRFvRscaRT+uYrT5h2SiqsBb4FaDkfj025iOBTC\nGlMmXtmQBjCUC2UFygIFsNdqKfpbngrBzyzuKuaiHIT0Illyf1/7R8dEkjrZ\n/9L61kjCSsWkUe5CP91jKMcStd+jYp0RSMFpuvoRYG3TZZgmAx2K48+ZCcoh\nRL/LOtWGKYtzahU2izIYDrkXqXs4WRnm2tD4ydN280e3mYkx9o8shNMBt0wL\no/L7SKOgKNz2M6iYVf4V5IZNXfGeK/Ia2yumVpi5juYR3nM8Ne2hsxgGvRQj\nW7DTq9hhZhIHKZ0al6mhd5CsKfT10RQhmiKca0d2jZQd37zOghD6uCi4XNu/\n0YkSYw4C84O6MZ//PwgV36d54B1cfKo5w8w6W6lt/HZA2cijqZJvtuWSzeN0\nOj8bH48Y9OzlgvkJ/e8kRkTYCB7N+mbKBLUmSCdoiFo60iIzXZsbQ/fXkyIy\n2QSs85Dx+c7Kl2fktjpa5DLMKOVZSf05vBSLz8O1ygb4gWvT5Iezsu+KSjGQ\n8uRT+UEUEiq92lSjdV4FYdpaMPXrk0lOCPcTrx4glgKZ0ybFer+MIzZ1UH5z\nBWUu3EuRtSWH2ZSyx6dWq2BbxQYDSdcmA5L7gzM285hB+beNj8jpjJxRiKij\ncef/\r\n=Dz9f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0Arqj6Mo8Gi0XaaQikbbW/t+tl2wSHE88ej0ZipbfbAiBwlKjI0aGW55B7i2xWDtvDo9b/wkiw5bwAV4ihtkSIGg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.11-test.1594323150496_1594323169941_0.731105647474652"},"_hasShrinkwrap":false},"6.10.11":{"name":"ts-toolbelt","version":"6.10.11","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"ec1aba0779dbf64553c560dff589720715a4fa2a","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.11","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-uQlKDbvrj3lSBnBD0PDtqxH9q7dJtWZlFnYG4OuMO2R8ubiwWgo7SZcXqowmSIObk6rKQvO4WxzB7M0/jsC90A==","shasum":"b46063e75c149a5bb31b0ead8673b1ad05d8927a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.11.tgz","fileCount":6,"unpackedSize":431835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB3IHCRA9TVsSAnZWagAAX+QQAIfOQUPL3r7IyLvOGXuF\n/FoKnG3lDVu5rUSitI40g2JW6o+7EIxWJig+cF5fwSf4qB1dP5Xc5JVVVxIZ\nVbYx02YF3slN5AKBhNtHPZPycYOT18QHB0OYQF4src44yqY/swB/Ub7hHu4F\nUlKwYSlkR6YADkik1P/9HWNUfVJKY1UljmwXg7HfbIREKyFFup58UG9XDb7m\nEGIbKTeKNQ1Kz7Vm8fH6Ev22GGz7HCVZ8TUD0hXGvJzV8/yjSCQ/jXgAvIaW\nOQMfhyo2YQE00Hi+NTktthwvZebWVdXuZzaQv6dUl/1h0C5jNetvfrj07Hzv\nDdAIQI2gYQ6KB6nZyX8qyaF/VEHc94LfJmRnpZ5bbtEvuEjQekpF4lUecLb0\n/ttJxtV2oVRAHOmZaGwlfzo0A1ABTLfe6oxPK2v2vI+icsxVh950dCUO4sQ4\nfKMBIhftDsls00lybVKe67AESiJx2gzWF4UB5ClldWxOmW97JjV9yxjT/cAH\nlFvtTDsbGOrqkW4TOnjvrsSBoGwr39v4BLCC0DID+9NvsOZtX5rM9pXeAKK9\nfehbJS8Z4nm8/1vtd0rpDuwOXtHeqAeHS8FWQZ38u6wfqhcCS64JeGfTpxe6\nYUc8DvlmbcUBIiqXIEgS1rETc1bMlLuNgcJ121C8qA0oXE3xJ0p4cASXbFjC\nQpU5\r\n=kqYM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCC0Vtazb20qTsHIa2P7T8J/VYgoe1ptpUe5x9AFEHXwIhAL4ER6Yc67w4ag1oetytY209wcOSUJJfc6YuhinedR3R"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.11_1594323462552_0.4253576015151632"},"_hasShrinkwrap":false},"6.10.12-test.1594336752873":{"name":"ts-toolbelt","version":"6.10.12-test.1594336752873","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"e0d309e730ebe45ba85c58920daf7ae5d3062faa","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.12-test.1594336752873","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-NHpN04UNlWOYulDn6bao1Ynk/5Z0zbFoK/9lJIzr0RjcHAHbCc2r8H6/6OXJOQbRV/+xKIWClhyfO35g6wpqbQ==","shasum":"c8dfb07329dc737107d8b8a0ca416f1732cf87a8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.12-test.1594336752873.tgz","fileCount":6,"unpackedSize":432986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB6YFCRA9TVsSAnZWagAA74wQAIdPqzt9YnoFYc/hIh/7\no1ZTYxVzM0kBo6tdkjJu2KLPh74x95+KHDYFxHRocjUl4GBeW/UU36i/szZ/\nOqUG+itpz5yYT3VQSZgHl8KlZtzZbr1H6NthD1OyQNDvOk/ymuaSgTQQSp+e\n+5XHMNfKgkG0mJwPPOiB4sBf2fbBYA/5ePp76JtEIxTyrmG49sLqRpA1hca+\n7y9byhUC7zYzCVWtYNzpxlXIwA9aJQQAXxoO+ZMnuLWrpUwgRvkP9E3ZIkcj\nri985bR4WuMK7z8qqTxlMbXe/6Ei0fhLAHcec/WVG2eIJiJbAsO7bCsgF7Ie\niAkfDP2gqFSMJRV80dRBy5FxkTUO3BCupVp9z2UMLuizqaMPW1NKiqXJ/uJI\nQ3MdFFWmW2XQZvj4Ba6GaqNaACrBED2piAM5itWfMzmYloGQIdMlex3+5zDF\nDSXpv6x4WK5rPD/Ix3eM8z0j+mKo7im1Bzi/OwU9610RsOLPr8Km0Exm397D\nfhUXyB1Ksefp9fDpAoABoUqYMeTY1rIevaac3nj5ZRizJyIiIhm/XdlRZsUE\nJzPIQXwcXOAEjsjmVYQgxD2IuaHXmfsnlXy/BBPcNAoKR7dH8JuPVFAUrq1F\nwvi/DZdDHZ9ClKSROrYcCFoZXIRKvRY1UYyFXie9zcAraNQxljbgnUZQK17R\n1h3y\r\n=ndJz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAC4JqVF9EVUunTTpiyRqF9XFncqcAkE23taZyKcDlCWAiEAnKe59ez2mJ8sRVqsnYC7VkY9Pv6MDWw0/FjcZZS0SJQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.12-test.1594336752873_1594336773066_0.4739944862626597"},"_hasShrinkwrap":false},"6.10.12":{"name":"ts-toolbelt","version":"6.10.12","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"e0d309e730ebe45ba85c58920daf7ae5d3062faa","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.12","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-7x1fbMf+aOP59A0QiCF1b7ZVJHUSZpluqc7Qfr9Da+wXen6OBOGODU0h2DYzKtzDcnbL00IhzWDtpQCebaHXIw==","shasum":"e4ea1729280e88bf409c6ee1b5fbb32f789e63ff","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.12.tgz","fileCount":6,"unpackedSize":432967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB6c0CRA9TVsSAnZWagAAYWEP/AxAYVBbcSwTcd0gMWnG\ngFrz+G5F4ABwDY/R5XhR1jVjmx+b2SBXixmPwKueF8zC2rsB0OcD/Y4kRj6H\n9EAyj0gPotrbQMCfJmrDSDF/eZJXUxNqtkWFOQDUDVK2F294kDK7uCCa/qG8\nx5VlUS6xJ0KojvLehXWh61lWLhLZNuwNra9Z+zYLnULlxIbEFXY/rQbP6saC\nf0ShG2W9pICTWzDrF6FYMCF8UwmbM6pQKt5FDK/7ofQ4+5YXJ38w5h/NUKtF\n6f9i3VFc8r3cgTTk8dOkh9Hp3hce7cNCBQUx4ZtU1jjDju5lzi8A5z6L7L2a\na/E3l8DjIMamvSZFn+TXTee9bM2sal7xGw7lpn7PY35fJbZU2OG0KqMzXj8u\nSq9Tp0hcWjZWY5r726jynkWSYTLxE8rm3naiZLxYP6Dmiwm7AMN7Ocn7SyeI\n7iu57Qf4FPNOJXbJnGBorvNhSXJWl6iXZzJRPkuCDcpIQ6x5MXWMBFASuo4K\nBEuHJ2rhlVIdfb9ZjXbuLvjwe3UR6tCWtI3+azgzGXZXir2gTqh8lrMB1gWU\nNOVq5jXJUafVxcszVWTv1PBxO3bA77GQ/5oXBZloHN9VgMELQW4v0jKJuQst\nJrRB5qtcNbH95ykqoWXpBmyLzw2CLgM74E8uSzNPXS1FdDqb6ZDgOe011pe0\nHLKw\r\n=yyJ/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOGLeXB7qyjWb7VIUXVBZx8DKNMfTlecMCrOQOqDjQRwIhAItT6EP9oPJWmm1F6OjSbBbOwA9TqOvdo4uBfNhTaRZ7"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.12_1594337076029_0.12679365279474486"},"_hasShrinkwrap":false},"6.10.13-test.1594337552374":{"name":"ts-toolbelt","version":"6.10.13-test.1594337552374","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"8a8890c61276a5821ac5eea85966d5571ffe7555","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.13-test.1594337552374","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ixDxaNpNfVrjoPhoAxVZimRKaxJI1N9DYRBdJXG8qSuHO+KC77gSLEKy+yD1/u7GSCYGl1Au49i7Sqqn7ljQkQ==","shasum":"2edd66a8313e415146e3341a3fcaa2322ea157ee","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.13-test.1594337552374.tgz","fileCount":6,"unpackedSize":433407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB6klCRA9TVsSAnZWagAA9AUP/A0EW4d2I+8z84LKAyrj\nRLT+I+4ekAgqgbObyhxXeRphcXKlIT5ko5mjCDTFguHyeuB8u/G1Lwsacw4e\n0bzhrXIEzY4O6y5i+Nn4iUrFK3QzGlqHavzOylQ+9hVvoolEtr/1cRV79C4c\nJMmCR44D1W2sdHaYxxq4Y44xEGxbe2dLr8oqhGXe8n8EpcP05cLcc4vrfQsj\n51cMO6hAUevx9K2mZN2eVwsalcFxO59xwtro8P6S0SF9+mtgprJ3aEPKlLwQ\n/ptbHGgQIXl+4UCF11+np8ZvOvsyjhM4nUumlhP9K4AivldSmVcA3XIzzBE0\nyllvn+Yt1oyl9LSKgmUsYW0AzD/zOFDEw2poYvEAAyNhlPN8sV0w4u9YTtSr\ndWNi7wZX166ysuJ+iKo6oJ08tT/gjyMnL9UNgWw8/rj+LXOhf8cl8DBYFhK+\n5qRnH+cWSjeHr2e5sScqRobZcGElvbunPLPwxPNNNF3w/x5mhw3dreHB9UP5\nEEvTNVbbcelXQ4K+39NtkCxIvlj1zVV3gmk6F1bCWOQX66LdnveUnuhZO5ir\nwnUFuAjK3MjD1/d2wukJ6LcFwb7SsJsqtxc2AMk3LP5hI0p1fvYv6GihuW25\nLTBwftYN62uwBAwmBsRao6HST1K+iELI3o/oMRRuW8ojDWNkdE2NFJ1+IhUe\nYkbD\r\n=Q4l9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDc1vDv85MGXkqRPgPBXkxY0VLcEg+fLly0V2P8XY0nbwIhAIEPCegsItOMP6EcBVfCH35OR5aE2pVq++817lpKEPbt"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.13-test.1594337552374_1594337573022_0.7344906238146438"},"_hasShrinkwrap":false},"6.10.13":{"name":"ts-toolbelt","version":"6.10.13","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"8a8890c61276a5821ac5eea85966d5571ffe7555","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.13","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FUCdx7bKXjXDS8LLhyQO5KaMpNyCPTyEFkf6V+CLMsjqDNs/s0GKEKGH7n30Wdl+FmyIoVAxTTMH3oPK/WOGJw==","shasum":"9a20708a4633387662fa5d98eb50ca6ec8cc647b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.13.tgz","fileCount":6,"unpackedSize":433388,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB6pSCRA9TVsSAnZWagAAoS8QAI+Az+L81sd4h/Mr3YSI\ncKDM0kd6kazs/5UAuDc9tlOyQGoOUBJKWA1rxATPmZDBGgewkGcnAtf0Xdzm\nY8WVrDJV5EelxYYNlp+5sd2+Sbo1Xdebzh7nssIV9mxcAAtOyRXhREKFmZIm\nSd2R3f5LfqQgaOqoW48d52fe2dVft3XNQWWJDK6xdwa7VrjhHKxuc5IXCUnj\nJh56jwzXxwfDtNNdfIHQE7n3iZreDBLsT0FZNeEangp5E5K3C5+2t/YMbZ1q\nKDIJ2xFNFepZLEahobDVHE8yJek9ENNGieDfPDHmdp9bnJt6CrRrEt/HyLiC\nSyASA64hLH5F8oGgMz2BY+FtffhMlS0Fz4g5Cd+bdNeJLKk7XKrej2LFJ79F\neC1TFtOJhGhwX2OGdgJYomCO+dkw7n5/2RGzj4Q1uWmSBIDWRflV2ItryrzH\nRAnA+EHJYFZF0noG/yz1yxtWzMOzWI7JrVf1tiQu4cmRgFMK2VlBhHrvhLyg\nQP2wlwFb4WPhQwfK+X4jmFcqzTcC76O2MSHsYYZgWSLZ7tyncazRiNfiQSCa\nKWh+vHCPuOkAlAqa3vS5ZLBIWK7vEeutaNatWASiId/h97mACGSW86BlZpSv\noVEybCvR2+1EQnuwamiRtxUrW2kVEp3M4WZZGFFueEUGas86Foh3Hw9yW5E1\n+yGC\r\n=runi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1xL1FvApl0YjHJLWWzLkBNzC+LLD0ykyZnxzrPmag9wIhANIXzokm3gdA1JT1qNK8WQ/AJc90Pirjc4QgbamQPIwu"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.13_1594337873824_0.15882855759298486"},"_hasShrinkwrap":false},"6.10.14-test.1594341179980":{"name":"ts-toolbelt","version":"6.10.14-test.1594341179980","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"32962df11fa546b3187f7167678c20f5e7fb3361","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.14-test.1594341179980","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hd9IsHj7nJ5qpKe+vQSF+CIScK58Alin1EtsQDrrjFRW1ApYm2FA3N4psLxiUy34i3V99bGhRxdkax1W9CipCg==","shasum":"8551d9e5979e863aa0c3c1223d4da4952e5176e0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.14-test.1594341179980.tgz","fileCount":6,"unpackedSize":433458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB7dSCRA9TVsSAnZWagAAA2YP+gMoaw3ime+r6+ASdB8Q\nBW3z+UicvHcvWkDFQ/+lCbahj92+8MhZcoCntvOLggkCfP9t9f50lsY1VReq\nt2v7WdxltIWkJgYSIWdkhwRNGkBv+9Hvgvogy5D3HwCLDBQ4+B3WPtmm/krM\nhfcGAFDU7PtIbvW8+QDiI+l2wSm/RYl5gcXXqDAqeRaADBdM1gSQSWGI8KhC\npYuT9EPcT4MvtpzYEnmKuY6SNqS+ASxE5zb/ntoRyq9FmVSBg5+asP3rtfxe\nxC2AmzwBTrMKSdeJifJs5pjUr/Ifs36U6ZG1g/kpkOmGpB84ooHfNjDxX6+0\npY8eY/+4UX9fo5pL3Ezpgi/hnkNXdorHYuScrLyM/fB4Zrj3m7GiG3HdXbUs\nRd7B3pCoBAslir1BLkrpTtEWcdVh1wU9ZBOQFHInoWTFtv1P8A6OHxq/eSk1\nWG3Bb7z5iGjhYt1TOnbt/9MTgFOAdYFy8oexWj1LtInTi0Rv5RrnwBCA5Fhr\nvOoVKltzpVPV7rq4XrbVrhhJ9CP+0VN9ZzQMrTxW6f+zkHO5EBYkF5dk60OL\nxDI+68DFN1htiBGKRDyBaFYovQiNz1npGG8VrbFYhxEmHPOeiUaUaPCBTW/g\ngqVGq0arOWtpgZARDH1GOtELIQNWc/rSelkWzkPhWSg6MzZpHbfqe8ix8F88\nDOvw\r\n=39l8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsjUx3PTb7rPFmZVE6tTm91ZWDYxUtrWvGotnsM/D4ZAIhANuSTjyAVY/vbwHer01JxNrhmYuvbplLLb2Z+qo1r4wn"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.14-test.1594341179980_1594341201379_0.16238587978415642"},"_hasShrinkwrap":false},"6.10.14":{"name":"ts-toolbelt","version":"6.10.14","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"32962df11fa546b3187f7167678c20f5e7fb3361","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.14","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ieGomT+LevS5/AsxkFnGSzaqDSW0CpXNsLKCqTIsMY3Vg803enXbdVs8jEsdlEjAPzZqsxcMz2BnqRuwY4Urzw==","shasum":"6f78ad020ec4158eb61b4d057c30978aa765b6a5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.14.tgz","fileCount":6,"unpackedSize":433439,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB7iECRA9TVsSAnZWagAAb1kP+wTWj86n6ZM2S9yJp6y8\nOLyXLN+XNLk0SDazSk3/29o0bZmS/muyq+Nwax/6Fk/QCS1KG3cj0HW0OmhX\nebNY/9h2SBj9qMzvC0t8G8eTrDI7tddU1R2Y5SYlq/wrPEPRWVj3URYffwTO\n3QB303+ipMf989f+IRx7qpfO6WnbYC55D+n8MJtKq9m++bTZxsBduWEY7diY\niIvz4KFPVKrHd6cGUICVJivpBnMiNMS1zK2NVvm1Guws7g5v9DwGc2Y/bv4r\nHzqldyFHCFwUSH0ObTGYk3xwqKDdujLiN0p2xTUHR6rboO/7YqWTeXkMznRc\nGBs54xRCtVaToRjtG1LHg0nLugimwA4tq0Zv808FcoCgZch6otUZWrrY289J\nblJSbAZITeVvjIF0IOPtGHEMeXAzvMEieGKGOjdJ17f/9RYSWjXCR8ECAKmm\ntSA0qrjf9oxu/omAElTBXs8TUQEUVKN2TZwzyGF6WlY42gyByiJOEhLA+cGg\nfi1NU+jS/41M9QrrW3oz+7F5MO2GpMfyaK3If6RsS1eZbxt9U3xTixbq815j\nwMYs5e7BEeSahu9oJuM4lBb+26xEQqj1SzXZMGihj8Ltk6OhDCVwR8TZLPS4\nIT4RQUwFX9eqqxuB70KgUNn80HqmzuoTtkxrBOYEnwCpLQi64ojtvxdlkORc\nN0rR\r\n=Orz9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7FG8onGMfy8fCCQQn37yYdZDmozoPqMfaqs3pFXgohQIgJ+DvSZ3hGL+VHLg5y2ZBBeBQlJmnecDKleud7bQwf4A="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.14_1594341507760_0.2137199116696764"},"_hasShrinkwrap":false},"6.10.15-test.1594371399092":{"name":"ts-toolbelt","version":"6.10.15-test.1594371399092","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"37249c6c77f26d364ccbf5780c7a7e6cf5b3ddd2","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.15-test.1594371399092","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qY6uRqP01xRV6obOHg8J2godqr5Jlhncxf9h/iMsGr60odyMS9VtHFxEEupz6MJWdoaet++Y1C9ByB4elgR5/A==","shasum":"8f0b195c4ef2f76e307671d4af93b22dda3368fd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.15-test.1594371399092.tgz","fileCount":6,"unpackedSize":434036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCC1cCRA9TVsSAnZWagAA1LUP/RyU9syOO7IRFDWt9E5p\nmdGblJmZkC3iQEOoQf7ip2DyL95zGN/K0Bx5F6bwdM3OAtvb6K0Apaz2Mcm7\n1bOiwpsVPxwfCmLEmV+VbTO3OKiZWoZD1zhLKYwgWbPU/AYf/8xTo0l0lsUH\nS6xZ8XOAKTGAdiw1o+bA7Pm8H64WFI65X/5H5jMty1RSlepM90rfr7o0LNHM\ncRpbObUiKzQj0HKvBAF0UoWuprIPVNfVcKwTAycTIaWJosNAqRtzAXGiLSdn\na8whpjhz5lK0WyqQG1xLDcAADLgXNrv33PTLwVwQtrePumXJYsfqgwSZ2Z95\nGH0lSyi1mK/4RCH6K6QAm6XkBgD8h9m2fFaK1GxCHa8Qw5+fVquvd2IPmk2D\nW4/ynx6xpufqnXjtZMwBGvY5X7aufK3W7e30tZ02R1LeDfdOcBGlzxsW53Rn\nX7HesrmAVspdvLmR+KZbwub+ap3pbJfG8wO5o+n0pAt5zxpSFuN08s2QvWac\n2PX0hmaZF9SBgTYBksvuKElg+o7Rx0KOWep4kR6D/d/vp9Hic7LCbKkxMMS6\nB2KERHpvb5b6qWrYdn+iz0ecLo4a5xiBqnFsPwU7wSuNX2sjCbjYtWaZUwFp\n3iAJMrFqgLiZo5HQIOI59CJWxobeC2WAVXyR3XPdqsqCMjp3y3UyUmmvlFvK\nnnvs\r\n=NLUn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkDuFILmM0nyYyxZv9s9ciMhQ7fXWO8bsmYnJ1esyNKQIhAKB0ovHwTvWUAFpM1yWs2R3Q/Z+mqvHGVE2Su+ucA7eT"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.15-test.1594371399092_1594371419844_0.40093022096339714"},"_hasShrinkwrap":false},"6.10.15":{"name":"ts-toolbelt","version":"6.10.15","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"37249c6c77f26d364ccbf5780c7a7e6cf5b3ddd2","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.15","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-gG2yPSGqgbCty/LgssJtyJRqhgq8c8Up9DN7x/l6nO+fd1IOdazUHW6VVsUowCi+l8WMoyj7gLx05oFU7mvI3Q==","shasum":"970ac689aad1ca30f9115c91c071f9bea55923ae","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.15.tgz","fileCount":6,"unpackedSize":434017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCC6XCRA9TVsSAnZWagAAxZMQAIKlrfluzR+uJoIhO6f/\nG0Li79+46HUF5sPjU7biEAFj+k9vobIHO7SG7rrprBwLaz43vCsyB6n3W8rs\np51m9vBKxObScUKttArqyiYHY3S2iuTl6iKWcet5OQHL2kE8aA4CNhFiVHuU\nCZBayaMl+p7fCC0lKVT3sblHAudrLjLDsSkVBkFF6e7hZ3+oHurICZMdv6yj\nhWxcqNA0dKC7R1JBNFodXhu5lbTv6TVvxzyJyQzYCcIWXu7JdCqRSSsfa8BR\ntaor7Cuhtcx6nRs5BJ/6GIlQ4syH/Z+2Ea6HNv7jcKWvieSXPlMnf74GFprt\nJK8/LVXZyrhedE+YEUynIt0mq8qtCRteZLa9obWGqRr/ZPMBbKB99DA3y4Ah\nLL0nPpOijtLoZ3TMyXQspqpjaauiWnHPt5P+I2h8ILrfHo35zQaWPHPBibMA\nm7wif87bapS4B1Cei4/5M3vNZninneSeLFLaCV+L40po6IBYRgr6PBkA8FHs\n+5kw7MtCYObwT3aNpakgiAADCf+I6qzKkY4GlC3prbI8hgTfXdTuASnKcYm3\n88fD9G9zz72eSt+r4pOneUsHc5b/wuTZhBb9sqRv/Ck/zTFbXCz1rgnqwYb+\nrxts3hTRqF9LfT20iqR7mxj3k48nm/W8C7MI8ZiI+ttHpmWNHmEp7AhFp+NW\nZeLc\r\n=zJtC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCMGwQQlvHB6Br5mh/dpnTNMkjRqTns9DktnJv24yMJgIgSQyRDTrFlM6JpA5WURgXC6X0/n0UCqRwH9JDCIXI67Q="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.15_1594371734948_0.9440667004660892"},"_hasShrinkwrap":false},"6.10.16-test.1594374932591":{"name":"ts-toolbelt","version":"6.10.16-test.1594374932591","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"1d639335ba2ae5602bcc14046fd14c4ceecd2ad6","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.16-test.1594374932591","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Mw0I1ZUczqJ72qPD0dgBQAga5kCUmAk+xX9XmroapDNOV02zFj+BW5hrhGlFcXAp2bW3ZWi4O9kGYiSpH6HMoA==","shasum":"a5bb20789e3f655a75a6a56e665c1bc3527a61ea","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.16-test.1594374932591.tgz","fileCount":6,"unpackedSize":434317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCDsoCRA9TVsSAnZWagAAZNMP/31jIHAKn41cb7/JrOVa\nlW/SYtxkNBI6P9wUxdtcwAWc9EWEw1e8p6+V0TvVgpMfMT/jctFRpOUt9dLm\nZy/ORua7u9Et3NuON2mqcwKUlfn7PfKaa7cB3P7VRQDACTZXvkioj3HIjLgG\naphclkoEi4qS1OaELxKQlz54jolnz/uCPQ8hkHK9dWv387gWhShN2ZO+oJ2G\ntJs0PrIo9fnyotvhDhGODEAEiO72xDKPTX9jyIl1ZWGKt3r1iZaCZK6EwYDz\nuzs4EqKI1xRLIjaFk/yACon3m8Htx8VRqK8f33Utlu9pShrVm/F2xvqjmiYU\nE9H8qhTDPG2AnvK8HFjui0U2wknKz6HSSWlCJtABySAb9l3prCAEi/9cIphz\nw6vYBBunIyypCbrDSC4TkkvFhFOK9bQJv8YixQcG0hd3Jq0LlFaZLxaTQt0R\nlVQRj7d0DLsfsIT2da+TkaJ0FhdqOCsTRbHZLSPRnChnk8CYu44Yxomx63sZ\nYxVbOfYsaxRBBG4m9OLhuxF8k6qxA2FaXasj+U+GleGyzyFOYmWZwjAu+SSJ\n4gMiCzRxFT9Vzvdh9CDUPpGT3WYK36ymZ7FQ6udpJHDDMzjZs3nfCnq5xE0C\ny8FhEvkDftYjpScjyu5mKdDGYcocnXnWNbpYZEit8uxd1xO3hGBvM1lLNIzo\nj92G\r\n=0leA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+SWESRZ+2DQS19xI4pYRxtPNgMtu6/bG4R7C+ZzDpuAIhAJTyAcqEI8Q3VPXEjoR6qbctWB7qHNsRpsE4IUUOREJ3"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.16-test.1594374932591_1594374952210_0.07882646756963929"},"_hasShrinkwrap":false},"6.10.16":{"name":"ts-toolbelt","version":"6.10.16","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"1d639335ba2ae5602bcc14046fd14c4ceecd2ad6","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.10.16","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MAad9fRk8oO0WqB927LLdEkZg+Oz0nAkuyS4zTsTk4L97AjHX7GdFGUk2ABkqgo9S3V/Wkn2pd2df2GcZoayvQ==","shasum":"c45bab5b5227d4ea3f120635aa5632150ad8191d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.10.16.tgz","fileCount":6,"unpackedSize":434298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCDxDCRA9TVsSAnZWagAAEgYQAI5DeWvFgmJB/edGMSFF\nz5ErIwL+1mFnmKtQAwBGsYHAv+eCAKR8AEMyr+x/NXCN3x0bzx6gejotbA9y\nPTEf/g7AWlruW7d6PCFP3eva3wyC7YwzaP0ROQiq0zzxzKSNg5QEARYCZ7T8\nbooLz3QjeUbHeU3ypFHw4FTI0NIKoHrbopnKWfaHXTJ2wgK03vU9uoS/6zIt\nqXJT8AAfVxVasKxaZGdyK0PsXdMlaq7J3ceRUqdgcyHh70989gxzABC+f11u\nq/iqz+N+02DQPpM98xJZGrFtX6YRZIuFyTNSwKKmEpbO38xDzin1kFoiXwbE\nQ00LXYOx4rRj1+o/3GX0Ez4asgTT8LrI/7cQCW/8ylVbUXhW9emp30FA2+k4\nIcS8QRrZXIJ2wUUN4XwrcgXyIwo/s3tEvftyaYNKbhFy8Nj4I9bL5WPwFmro\ndkzq/hhIr1DdMnIa7DsVEnkoy8QvoFcT9KYyRI125C11fC82JmQeCcCqBucP\nNb13I2WW/ieU5LTjF4XHaO6NoiZNQa+ulYivbNyqop1zbi+jCwvnNZEmQe+w\nhf4hxfsBZdEZ5FnSnyEVg7Q4Eqd8J7aH6bcdxCz/N+wsjXxWxNpcdPcJ3dJ1\nQVkNT11JXmY2aJPNvO5O03FQ6n9lnoy38MXqLKgqSqWf41pGx6uK3wvWq83I\n6J02\r\n=mVs5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsZqo4kpoDmr5pL+/gxC8NQKaIdxKkVA4WexnvXxYgBAIhAIj9lJxAM8VuctZ0rBFFPYQuO0uPdHIv4CRxqSrnRGNI"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.10.16_1594375235410_0.22598067939792732"},"_hasShrinkwrap":false},"6.12.0-test.1594461437066":{"name":"ts-toolbelt","version":"6.12.0-test.1594461437066","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"19669d9eac404efa9ace290acba7cab1c4142fdd","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.12.0-test.1594461437066","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-S1sBosgLxysRcRqVYlXUDJY3DSk8YFTwrcvSgR3IWGUKPMnt9ejsrNFdPOLiigyqvRcbfpzCH4/PorDn+u96YA==","shasum":"0f4b51e3a786371e27e2b8b030c0c3715617fe33","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.12.0-test.1594461437066.tgz","fileCount":6,"unpackedSize":438884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCY0QCRA9TVsSAnZWagAAxYoQAJ95ENjujQVD/G+DJcNT\nmsKSyAPXuijJgkFqhkopzydqdOWcs7wD+F2/si840TgZ7WylCGvl+o+LqKIj\n8EqUi/pgPtuAYp2Zc18q4T1h834pEBM4Gmr0BDR4+m/H6U3X+yv2KEnHOT4i\nO3ImCRwj/56ZgFJdioQT9+KgPWIzLCPChcMVXEymr1qce4P4Oyd9zx2psyrm\nsiM3BbTMqaXCehwXHnXsYZhpr7vINcCo6LOrN2JcEXueup1V9gR5ExBfs9Mi\nB8F81oZ0KIV/JCsKtPd7lOSBI9EeUCpHxkHEcCruXblnIJ0opYa5L6CHj8qH\noY22B3QupZ+qXv5Bf2JuBItAGcAKcYET9rObE3/fYoSSb5j8XIxnYjgpHFek\n5tvvLSJ3M3vBwbCNOxpUBy8iUiCbxYI3gHoO8fstKqn7a5UEuYyiT/yAd7iP\ndxB2IlkwQZ5jLy5O5VdjD2WHNI3G1td3Jc8gRcmi3XrK+bq+5Tc7FQ3ZtHak\nYfOAc/6fpQDQa+KSFQ6WbAcxaBM/wWmATVwVPhUi+/lTygzQQLbV51eJFnFH\nsh4DCvaCZ/QD0VzZunN5rtdn8T+aTUEl3vFq3vlXMZkXbYQtqy0y26tO1S+V\nB5IdHV8/7+060fPVn1uQ4DJ4J9eypdzrErQEPd3k/aWhiEHVoHZxo//CtUi0\ntKnT\r\n=Jl5Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOFjxOied2MWPDPgZWHGBWEcn40A7wFE5X721zb9U/fAIgS1bXvgt85qveRMNWf1h/w3p7BWHulMbuucNzMYAKOH4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.12.0-test.1594461437066_1594461455773_0.7372493901365469"},"_hasShrinkwrap":false},"6.12.0":{"name":"ts-toolbelt","version":"6.12.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"19669d9eac404efa9ace290acba7cab1c4142fdd","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.12.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-F6w5k9Sho12sMVS0XSF+K8TThyhcFyKAUiRUybu81hMTLZ2MnpLuvQA2AcIMjrg3a7KWWtkOC8HNGLZZj/5Jow==","shasum":"342ce8552f2bafa56da6165c12f3daf4886c0f43","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.12.0.tgz","fileCount":6,"unpackedSize":438865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCY4oCRA9TVsSAnZWagAALUsP/1AfOyTvW9/AwepiDSJD\nyYVgouXpSJE9oayxFycHffa98lOjUrgbv16PPTbVXKOdH2xHrdOf/AtfwO4S\naKGiBO2kuA7HlhkBlzs5SxAX+/A4Qq5XH8u58Eduv/KKaXTlJKmhLEADvbWC\nlbrKFSlzwm8GopJsenmjOwDaOrwt5eATP2yxRWV1QMrr3DhbVPhkYFZOkvrZ\nKkys4S6MDmeYulbIpwhBa6Z0rkEx9FR8jH0VjJ9l+ajx27UiKbiEhvHuL4Tb\nqE4Itkt8TqDz1/+gDlA+JuapAqm6h5yETTamD7tmuuP4Qp8GZf0iKUpIWWNE\nnB1YFhssJL0Fvt93FgeILhw2Mz5AMYHCcLbzWNyTBSZ/e51y74jkbW/SxdCK\nFnOSBVA/wMchhLDKMRv981XIXJIIg7mAex6AZky1un6rnqC+T9ZNxhC14xey\nXUWKNeolRsQAKkxJuMMf+P7r5v7+LSbNRJGN+Ojv2zvdj5FuF0sD0ambXhQs\n9NKuM98LOECC4NnOphY6/B6MLW4wrKBq6yTcolvjb4H1t9NYzJpdZWL1ipft\npgEiIZI9lztkEmnvWJZZveXkGe9eZES4iQdTZ4GK+HOkR/qL3+6KzitAtDpu\nXnRWpUoZVVkPsFAvPOZjEJNTAvbqJr/STDbLjug2nR/wld7+yiQTPg22/8j3\n51YP\r\n=7Ojx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaMc/pvpWB4uhW1Ri+xfN2OzUEF9MSbJKD3ciaRflZVgIgHy7qrY2dG00wVa4MuZDntHjPie55sh8eH+w8qdrP9kQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.12.0_1594461735895_0.8013498455414978"},"_hasShrinkwrap":false},"6.12.1-test.1594462197241":{"name":"ts-toolbelt","version":"6.12.1-test.1594462197241","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"d77fe1463d50ab45db3faafccee87d73b8405991","readme":"<p align=\"center\">\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://pirix-gh.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/pirix-gh/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/pirix-gh/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/pirix-gh/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/pirix-gh/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/pirix-gh/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://pirix-gh.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/pirix-gh/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://pirix-gh.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://pirix-gh.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/pirix-gh/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/pirix-gh/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://pirix-gh.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://pirix-gh.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/pirix-gh/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/pirix-gh/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/pirix-gh/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/pirix-gh/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/pirix-gh/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/pirix-gh/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/pirix-gh/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.12.1-test.1594462197241","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FttOMlYtT4+1TO8wGURO9WIHoqdLFXN74J5rMOcwsURl5C3oWi1jC9Hhjnx3132hDHRvMezeiGagR2myewiUMQ==","shasum":"cc43fdbf5a4e640fbd9fd7a5809a571355267d4b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.12.1-test.1594462197241.tgz","fileCount":6,"unpackedSize":439901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCZAICRA9TVsSAnZWagAAVxUP/191CMODFmS+cZpBZ+cG\nlypw5LX2ReAsbKSpIQ38xSVlJbrCjr2Y08NO25TL911+Sm8VESm3gdLz9z26\n9R5sgEKgJANl6+enLNrkQPoEHOuzp/txkUlFxbM+/CVv420tp4VFjFqnTxe+\nozh6Sqi4JZLp5ANbcLXD7uWxqi1YTUj9s1cof6/msLzaOjKzdrSZKHV71dO8\n1ZwJjrWP8oh7ZF5CZBf7FCv4791BgZ1pHvM/288v4P+DK+iC185eJGqEJJ4f\nVfkfrVqG2yCggPEc9VMBNrnW0dGxAxpzdlVkcgsjb4Gp74JNXQZJ93DLF8+/\nAzSBM1MwYWLQK7RBpayMPWV5o0PwTqxyqBMgsQ3twopnbVcWitzggFUFh0uP\nHUyHVlp8liiSoyq40u2obGb5vpExzXiaICn6pLzZxrhfKcR2PfrMhtzHXWrP\nBXb0tr3KkSLF2373H7Cm+iuhqQo2ZbHKURfjvqASjYrsf9nY5oEcLbFfXUEi\naQcBi8ces9GC1ed+n08EyLdeWi3XDRv1uZcqaD6jNOYS7xypNwNcyfai52uS\nePGeF4WR7kv5c5uTTBoxctZfqjar6ZM/f43lJ46nfipqcB6nq3h/t7+YRi9M\nN+ALMLB8FWzUZXEbSmMwif4IR8byLylVn7Bggp3PlL5hvqMuBjTheLW3vqH7\n8QJX\r\n=+Adl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDT2vkiPyDn6yKjRgYhZ8mI5lN26alyuWnn47eEAM6faAiBr6WiMwPQ4IicRA03vCVPFhOSm+6xnV+hyTPw6V2dLxQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.12.1-test.1594462197241_1594462215745_0.2937392572988846"},"_hasShrinkwrap":false},"6.12.1":{"name":"ts-toolbelt","version":"6.12.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/pirix-gh/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/pirix-gh/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/pirix-gh"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"d77fe1463d50ab45db3faafccee87d73b8405991","bugs":{"url":"https://github.com/pirix-gh/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.12.1","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Y4ZMdw+CzHnzFp7yp8axTDl6G78ypeS1XcaarLoXpnW0McYR7kDLndU2tk7nIEdM99yoHjaRSbL09ULZMtN5RA==","shasum":"bfcfaf0e1cc7416bcfc412c9340233f57a1f86c4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.12.1.tgz","fileCount":6,"unpackedSize":439882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCZEeCRA9TVsSAnZWagAAB8YP/jFEWUTpXeXAl8pM+jCR\n+bkDRIhAixCPagLT5kPBZhX1xJixrWJ7IkbTDRft0e+ldd6rBI2UvIXtQjx9\nr5B66xshbjQcNhd9iRXxtAu97SIdBzHlUK+JDGhu6LEhaO57b1x1KJcD7ZeH\nbmVAE2md3kpDYCosaLpbbb9/CR10fdeL9GLdPtVVTICGeLcnnsbnVQFMUGuF\nW2tyoK7qhrQQ2HI7M9rFXeSGp9cOGVwGrv58OBmeKPfmAvtKieBrk+q39n5D\nc+nMKs1jhMWZfN9KgG5f+jqzJX8YX5jZxe6fBnB/FvY9+HhID8Tkh8gGhYCR\nnm/2sl/UqnWgVEAFKibDw73wmRW3O62QtIIa0tbE+oy034xomnXdvW4l35iv\n6kQcHW5EGDAkQMHCmJPoreyzXC2DkRENinp6CXLmnqoVLA1JhR6utGUsTuWz\nBIBheZ6jH3WPnJ/x37jQcN555LESHUEjFLU9kbuclpMWUdxlsbNhh6ZoSdz7\nWcUQ4E0FMgj+Je0W8Ne5JKe/stJX0PgXTls7bgVEEfATHjpj4mdVbh/SF3DE\n2X87HyTOxGMbDzwtobtFncxhDXYNpCj+l0h+Sj0o7Bm8x3pUXTEJsNfyIIBa\n6jzvYxSLdqyw8FRdzz9ybcMupe28OJaWcwO6xR6k/mVCa+NBIMRDUwcsSiRU\n6rBP\r\n=eeyh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBDJFexky7TNMju5TL7Tv3CXpDvGn5MnF6PkxYskHfa3AiB+VGRZSSDGILQvtq+v/hYJVQ+S7jSbbDRj4QMxOSS19w=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.12.1_1594462493671_0.39925133636732757"},"_hasShrinkwrap":false},"6.12.2-test.1594663634021":{"name":"ts-toolbelt","version":"6.12.2-test.1594663634021","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"4f782dc53c472ab491fd0a7cc3d3672ee7b2ddba","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://millsp.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.12.2-test.1594663634021","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-naFrSSscuNmgNb5Yq/90N2/or3FQ2lbBLd28loV3VrIUHpSKRnha7VHQXgnqvSwhA4g6upig/EKT/G4M9Ae+cA==","shasum":"30ffc5d722f77d660660bd865b90a4186eac7996","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.12.2-test.1594663634021.tgz","fileCount":6,"unpackedSize":437442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDKLnCRA9TVsSAnZWagAACIsP/11Z+s//CLUGuIN7ArxE\n8znp1aCGQezmKi+cvqBjcuS0ynbkEfuX8GRCOSQ2FfsijC/rTKHVevYE+K+e\nv+ul+3MwC8JO3v5CPUlNYAo1PKput4tJWKA3wFn61YZMT9CmswfSxMBhvu46\nxTy7oBbUYcb8mK/LFTP15k7js6j9vELZcuVdO5aNaeFps7gUfA0mkOW6xayS\n909GUcwzy2+0SdEQH/6FJ+bgsd51NRoOq5YAby9BzmM2aHQmO15qWPnOVX2/\nfbgZ2Zq4L/DzHY2L3hzBWtHUPtPSj/FIvtlywiMvrYYtCiuq9YElASidw7da\nLq3IYrXE97V0s27cPvsPRaHU6nz4o503bttGt7jnAYUTbeVMk0J8G/3e4XDA\nMrUqI8fCobJ3ag0kxksU9aGX0dUC+zv/97DH+xnzHNTNCxCmjPtX4GyoUxTf\nNqeTbdyxsp3NUtQ/Q0+jDN3pbnnA/EfZZ8yDURkzx7DJvA5odzmXMndMqLml\nR6wqF7pAJ/nnvGv8tJdtiRKX8iSRl2tEotWDRIZGpkkESAf0qOcacFspkm3d\nK4Nv9rlB3muCuzuhQautJij60hpU/dpZotgk8tUXjVIg5c+lIL664+5CeXRk\n1QpNbwS/Y0HatBoFnQMbtvFIlOocIW52TUmvkKnXduzrkMAXHZdXDVqQwqYy\n2njt\r\n=ooKD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHUeTDTIZuenmFr9L1I5EVuCN6tuing6eNLGyDw5s7MEAiAPBomuBBLlG/VhwN5ARYM7h+gjEp0aigj5FaHgIzDbMg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.12.2-test.1594663634021_1594663654785_0.2880993158620331"},"_hasShrinkwrap":false},"6.12.2":{"name":"ts-toolbelt","version":"6.12.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"4f782dc53c472ab491fd0a7cc3d3672ee7b2ddba","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.12.2","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Z9VWXJ32UpLrjw5OqieJ944heNN5gkVm69VLvVf9GgrdxoxPiM4ughyYFip6pIDqRnrVuiegMTD48zxnOW5j/Q==","shasum":"d9007906d903b89d7bf210f43fbefe2a2bfd5734","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.12.2.tgz","fileCount":6,"unpackedSize":437423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDKQZCRA9TVsSAnZWagAAwjwQAJxwMCLbLh0JiFPf8XRv\nqqwgP2GiAp/KPuKRRHrNhR82vpKU3imFULLM5qGPC+m8ZN/emYf81+Qe+qxO\nxc6K8+7+ckCMsadYCRZGG5RWh7JmvFk62KIgq7Z7N/Fr+2ve0sFaXkrp1lx7\n0XmtOg8tRW4lVyxar3FhZu8sHpXLUFV7kSSlQw1M8+4d7sgA1uRj0au2PE0K\nFyNhxGGrS1/zF16D0qg0g4hy5Dgb7LR7VmG/6eJ21PHRnc2t3dtkAJoYHySX\nPcUAULEPS/wA2aseNQ/ALh8geLmshU+QnM7/gWbfMCVwuHTxV0dIBbEGAy6K\nLIWplvnpVmGVc+No4pY2U5TT/PRaIuOOvnfPNpI5bZg7AVo3+51peeqKe+AK\nEKpqyxo21wh0ffMGAavnSuHZwJX6a/wix543Yr9zlB+a3UtloeCDnzZ4HBEV\nMWyc7HyAmobxlcNCnIVWng7odeQ9Unr85vxc2eYJdxo+hgFjfKs+7qdhdr/Z\nVMPl0KcOq1zb/BBlQzRK/WOC4zyBA0i8qftlRF4V7DW46Cof31idgRqZXoUE\nj7IvH2ublAMAa+RMFcDl7g+SP0nVrNDqCsfQwwOjv2u4OwifMLNqu6YpI9cM\n7HcaxoDImivOKnxwGLmO82oEq5rialIO8HD9woZxJRZA1pVijSjpnAadFQrZ\nXEcr\r\n=ku67\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpZcxNZKv/eLjh/1sIhC7HIdXdrQGY6k4loFEEfxKn1AIhALpm32m2UpzGNpXqt4WEjuciwxrfAhTW3DZ/keU1B0dI"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.12.2_1594663960838_0.723176448512572"},"_hasShrinkwrap":false},"6.13.0-test.1594757628319":{"name":"ts-toolbelt","version":"6.13.0-test.1594757628319","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"cdc1b7cefc39e1869a71edc948ade36308d8bfdf","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">👷 Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [💼 For enterprise](#-for-enterprise)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** is a **type library** that provides simple ways to **update**, **change**, and **compute** TypeScript types. It offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful features:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_mergeup_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from 'ts-toolbelt'\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.MergeUp<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, 'name'}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n\n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [MergeUp](https://millsp.github.io/ts-toolbelt/modules/_object_mergeup_.html)         | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from 'ts-toolbelt'\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from 'ts-toolbelt'\n  ```\n\n* **Portable**\n  ```ts\n  import tb from 'ts-toolbelt'\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from 'ts-toolbelt'\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m 'feat(name): Added this CoolFeature'\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from 'ts-toolbelt'\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<'1', '30'>, '31', Test.Pass>(),\n    check<Number.Plus<'5', '-3'>, '2',  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 💼 For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ts-toolbelt` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.png\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.0-test.1594757628319","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jUm9r7kLQ/CxWfrDgh7gk6XbdFi1At1qSd4rGh5C1JmxAlhFcgNt+iJZZTFFcXnDJIMnjLkfHQpUQLogaZnIdw==","shasum":"a7d6f0bc40fad1fb2b67e8f02f1380eb9216818f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.0-test.1594757628319.tgz","fileCount":6,"unpackedSize":438423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDhIJCRA9TVsSAnZWagAALEcP/3txjAXjKWKlvMHpaFUl\nxqStcq4A5vQEN/rpgYTCmlqcvt33rxrP0ZvhL9ZCzvPrIz90ZMRZeKgOzAI5\nAPUKAQFrYk+v5dTe/U+TOQ2d5++szOkWpKbmGkev0sy0thkROGKDhC0M9GeT\nsy4ir98jUZ0Dx/F32vTIGcq+h6Srvihf1WvNJr3oqtLL/PEXXy3iiF3Tt4P8\n8G6ssUHRCvRO0BLk9xwoRd0tg5dAkJkw3DcTIs7QFA2im7lhE9U/9ORkO6Ik\n0OKbbljm7hVTKlcx9YMtUs5nXyejUiesfJoSZ2WIXdNMCfXxt/ZbhLLLNsc0\n/YVrYrA34FCh4SuctQRhoHAC8SgBTJqNP29is6xXSAXB3PCUrQo0i/t8RGcg\n4ZtysPSEGrHgvSEG7FauXmt70jAtc8pLB43gzkk5m7I7GeF4v0AFDDLFxCYu\nW7ww/cv7LVtwwyyqlrCm2oAoBqXRce6Rlt1SuUWo4gUGnKYUvNomdVft8Yda\n3JTtq1HjwHNNdva+dv+RrFtSVL6hwr/Jbd+290S0/5Q4pWy+5S/GW/5KrGqw\n+ToRH9RK0Qm2/jEFk+qklh6nxcHrUtvjLdnxAlqhKn7ahK+LzSwL05fLgNmk\n4Ld7o9Q+rQ+j8sUdp7H9qboRutus57rJ3CIyTzupSrjMlVZfFOf653J1xCdg\nH5x6\r\n=opWY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF1refvvOtaE2+2ThPVxP3KKXkrqGIR/kbn1nGAIRE3PAiAqHtkjf/iA7KevdvcccsdAcUmbTvkp4wx87SxWrOU7Lg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.0-test.1594757628319_1594757640866_0.0003037163228614137"},"_hasShrinkwrap":false},"6.13.0":{"name":"ts-toolbelt","version":"6.13.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"cdc1b7cefc39e1869a71edc948ade36308d8bfdf","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-F6/QoysKjkDK08dHSbLHsHmsFWwvz4B05ko6IEj+fB0AkrX8O5H0gHkGJ3P7tFzUkp1Zu7U7F9Mv2hJvHr+FvA==","shasum":"28ac45015266cdb84e76724e8618766841c8b59e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.0.tgz","fileCount":6,"unpackedSize":438404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDhLOCRA9TVsSAnZWagAAPN0P+wbpjeRdhuf+NNQAljWb\nWR033Xz5u6yoH6WEY46us/BW4zr3iC2q/tMby0lVxvqvohnze5/1wk8O352X\nNLMPcIDaxJ7w7mwvwFnQtXLF2cfwhkqPxBlbl6/TGLhL6nzjEIKqlQX3ab4A\nEWL0Z7NDTb/cYdvrg7bPn4yzAJ00BM83a60I73TnJdwuuuReeoWY5s8dxVbP\nHElPWE1F9FcOM2vAbVZXVqkljYkh14xzrYths/jAs2bIuOYpZ0EjKAlZmxG8\nxx9x09Ezp402r1+T0XXSN5HkH4mnofKWUW8hmurlSVOWkL0+92pL0WDbDgid\nzs6RafU683h32upbn8m6IW60UkKusEHFfN+trPTMLZRL2gDHV5dTVIVx8Yjc\n7/fXiWbhObr0gRJdAsXlI7wvV0GW+zePreAnie/fA4pu9bpG1uyFBXPstSXr\nDLCYCP3YWDoX5YXc37jdroHFXJtq65jyrrQlIZzmToEJvtsiR50KrFeUM2FC\ntKTLeyjLxXgcSYfS+3xmWJ0SkPTLiOoZFT/MC3u65d/BM4fJ6qMZj2yDWFBV\njubj8eR5eogA/v0dTCLRbPoHN3V3C6edV4ZriXOGD8r0Xj+5AE1XW6c7Cso5\nbHRk6j9Mizf8SdU7CeuQ9H4+HNe34HmMCalutSeD6v3tzMxbMfPNJbaKSrIE\ntIaB\r\n=I6e+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPwRpAKsmYn2igem5WtyR/GRQq/8ibXrQ3mNP9OjwdvgIhAMXy1eB32QVAhZMA4yDkazZTmWzuG82ZNrxNneswbkqX"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.0_1594757837875_0.31779709245347076"},"_hasShrinkwrap":false},"6.13.1-test.1594814230562":{"name":"ts-toolbelt","version":"6.13.1-test.1594814230562","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"5af91aac238e3242f31c64e51ddc98dd15119390","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.1-test.1594814230562","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-unA/6SyyLSpx7X0ciJ+STgrwmfTNUz5+6coNfTBtsVNnvQRRErbYfA+j8+k92TEu3YsF7iLJiPV5kQ/FniGrQw==","shasum":"4a9c2c62aabfc83b0d122f5d4b2ca14015543bdf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.1-test.1594814230562.tgz","fileCount":6,"unpackedSize":438121,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDu8kCRA9TVsSAnZWagAA4u8P+gMcz0yC0FLCoQsO1PuV\nxK8Zaol1pIi9vG4l5ORn5rEE0EfzuYqGTSmEngZ5LDhH08cbqOVojMJLE2CW\nWBmSYMCTRV9gnj3VglxbHEANQ4cdlBSHrlkHfd0t+smw92N8ap1Y+ZJ4X2x+\n7hB9+avHdSJce0gcPxrD5GrweodoC4b8JS8FTLF2AnEkZ5XDfwbGzH2qg3Xs\nsihz/Adj6maKy84jXHuP4rhJv2879rjG6hLZhn3IS61wdH64/wt4qCmvsDk6\nxBt/F4DNpauQwTr0VgySTtb5EoRxXlAC4OsQsmyplNaf8M8B2DoDYCba8U6E\n2zLwg2kCtCNELsuefynSCsz5PNFEqF9IJvvCmphnxWQOEhlN0KsJAzOnUWwL\nG63RCo5hLrP37Co4EZrMuxaEXMvVSMRXsQWWc49M7UGcv2/ChrcGKsWN325i\nZVuUMMVlOKGeXtjEWYXAFBo1amoPKEKVUT0BVu1yKCVdqadD2cSCFceWFMDh\n7wMyQhADKct5kmltv9vvzmRrWS9Z3MvHHGNf+YpA6pLEdX525d+E0FQbeXHF\nyhaB9X1YeJdx8lI9kxb6lh+6F6nDFKIAlx30eX0NKD9PMhQ6wUtOWGCVm9bC\nsH4IBHkeXxsxLUQC4l1kO3u6cDsEYSVP4vp59+l/qiKfQK2v/xUeQoMl2aQI\n2xtF\r\n=k0bl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAanO7T7vp1kdCcq2Id9tTsjB0G38QWL7hIPSemEHTkvAiEA4DObTKuyrQlrrTehRYuEMdaYE8kml0HL+JTV2AXDgts="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.1-test.1594814230562_1594814243883_0.49061582959283156"},"_hasShrinkwrap":false},"6.13.1":{"name":"ts-toolbelt","version":"6.13.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"5af91aac238e3242f31c64e51ddc98dd15119390","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.1","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-9IeAtuSETwFT7xrOnsry64fJZ8ctX5mrwwXsgk1zkCOFjUEdA56p6qkfjU3Go3EEyb9u8coL1ysM/38p+glWwg==","shasum":"723e551e8ef5da36c690c0e9a97c66d8000a3a40","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.1.tgz","fileCount":6,"unpackedSize":438102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDu/yCRA9TVsSAnZWagAAu9EP/1c1leKBkAoDpLQ3ilMS\nNyTS1o9cLssuuL6bjfUdQwOTdvOtSt5nR9Gx40PnKpPEoEkY4RZwnLVMmiZD\ngaHyaNNPwYM1wN5vHqKZjias5CQFbOh/6ZJW5a+BnUnjeG0Fr//NN55Blkvo\nQHIcm4MJTpiHah7WrxIsiRJPmIKm71cQ25zdXWz64lV/jTZPoI1NYimQ3nrX\n33zhxp/mN8NV1I3BJ1Ye5r5IQ4V3zhM6W5b72daTsimdW2W/mGu1T2albMIf\nXkibLxv/kZAzCHELEt9l/cTAMTSZtF76KHWNUG3Y7g0XCbnmQgFUlRAYt4hf\nUJBM80hZjhWL6DnXC22VbwrDyjHN3IqWLtGZHeG3+1oItSvcil1UouUBEhsi\nq78QKOtM7+AU0fhDz9N1JVNyaxVlVLwfFl6u0qHLxPRZlBUvjhz7AEJTwro6\nOoMVrNGYZ6ylWGtbx/P+ljBt9XoBuiWJKgw9Yd/KpWcWlsf25Lr+BpclwBXP\npxNRT7APmSlZ3CM69x3y35H7qdyUnkvzngZFZhAHINm1rVqDtmAgRZNDy9Fv\naWZmgtTKlKzKGi6B343AryQwUAtKKscD/LQI8iKJBiBZqHRLhwttF7khYzYt\n2hFoeKIBxVibF6JlFlGZ2bTe7qBVEpFdQHY0t8GIXgAxXNQq8D19zksBOjia\nSpYa\r\n=p6M6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwGuMKsjJaNJ202i8VC0gZWnhR2kOLIXxv5vf3QopPzAiApQeyKRDr8ybWz1Vy0322liOBONVct5col2Z6eJ3e/wA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.1_1594814449553_0.12064712533719879"},"_hasShrinkwrap":false},"6.13.2-test.1594820144017":{"name":"ts-toolbelt","version":"6.13.2-test.1594820144017","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"71c850488d90020a1cc0f9806455cef0dcd6ab11","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.2-test.1594820144017","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-KJxXxawZADlz4mROYYikvvQU71HKn5Mp4g1K4pjgYQ5s9v93HZe4aY9TBqpW1+IMrWVawd/lhkXbwgaumK6Mag==","shasum":"0faf495239f6bf6edde9f6914168a814bf866358","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.2-test.1594820144017.tgz","fileCount":6,"unpackedSize":438403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDwZHCRA9TVsSAnZWagAACmcP/1nLMM8UhTtKcqaLEEMg\nl6whMLyu2sUp0HOIH8GKHeEbM4zzo5QleddV3BTjVcFFiQ7r/rAez/NF2jSb\nU7oxaZw80pm940r6cniSysHmRANu6YJ9Nt+ahHWuMV+dtpPpaDg2Jh/aCsQm\nV9/RIFh6SGkGYkhP/wqfk4HaWhjGBeKVj+I2M7qIdtQ/ZXsYzMNTVtrw0FH2\nqecMfHQi+5i0XSJR25rLtobvADbmmVlntTn/Z+Uv9o3EsWbqd4HJ3szDiPj1\n3ISup386NTFoTW+rYlOdG2jQXCEaZvwFX7VDRcjdKeZX6qtvk1w9+zfPLsQS\nC1Yiru2DFV/EmxFdDbg551rfV3JPivmfC39HhD7guvGJKnMfnMIqktmGHIFb\nQd6YR4hjgiq3meDPNH5aOdoFKXKFR6VnaR7QS1vye5H5PRca2COLiEHdm/TZ\nQx5YoUsmkzDLIKhXOvNZsSaOjETTH4WcLp1rU3irQ2xQORsjbxWFc3wVbNsO\nc3DhaH7o6h8WU8/c1YIfR2WcLYp2X12jT3E2TJxrfMFQLLJVnZ6UROUIlTNR\nHol8BdokmNZa6sMPtilmi6/22Z8uzHhYPSEMpruL4qwc/OwIZnx7fcD5ah15\noBLPm0dnZGrvKseiqYpaYSp001GSnq81hoPHCZhpoiuVc0biK0x6lNlKs2oN\nXpKA\r\n=H+sJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhS1BXOBjsDLsObML1MKvDAgALL8N/wBREFRbYTn5YewIhAIxRSPmFSE9n3JNzTYPvBccnr+wBwnbCIOAHg36xU0uq"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.2-test.1594820144017_1594820160675_0.4583600002770549"},"_hasShrinkwrap":false},"6.13.2":{"name":"ts-toolbelt","version":"6.13.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"71c850488d90020a1cc0f9806455cef0dcd6ab11","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.2","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-8wnAjhOgsE80qOo3dC6jmIXeQzSlqV1J7AqQxIkY4J00ckyPvvmjXg/TkuDOMrRpV0roLtO76i/4leZbi++9/w==","shasum":"15bbbae972102c379681d133fd342cfdd49692db","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.2.tgz","fileCount":6,"unpackedSize":438384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDwcdCRA9TVsSAnZWagAAPMYP/RDHfOOTmL/90RMEDH4x\nyrPymaZAZq+8/SuoyM/+qwKUDtoylEWo1pFXA0sAbVarbhqDE6MYNTtTzEeG\nGMEGtkVu8/PpwgLkXQAp0DS0/DegT/IZ6P3lpPBadYRm4laOlr1DxOVerOd3\nta6jecqRdujnLZ/liujlelo9ZAkJi7+vS2gluoAOi/vm99LK+NpJWk8cx65T\nG9ZgrQyJbzRPPVhF4KcLe5/k4oHtHLTVIOxJoqx/TcS8viB99U6LgQL0veIV\nVbbtkESch1rlbMHaT8h+WmkWxVYkmBHqSQxdH7ILnoCFT6ouq8+eL5SbSTMX\nT/BELDY0HbMFlOa9IhtdV1SdVi7yBnvJziRKvGNqFBbXJQ4u3jz9JT4Bz6HR\nOi7OJI/Yalwes9f0EZ31ReEnJ7inOnW+BcImcU1vefr36qyo7TJfXADLQcMC\nzQuZt1AiZrYllLakzzEsTQXry3A5EuAF0p8C5D/iY47mwtpU+cFyn75cLBbE\nyRV6Ka4ue3wtOylhRy2UWc9wVKYFMN8KbUWgJXKRyNKZkU/O997QFzUKJ8rY\nCllWAElLKvkbaBCyNUoTFefWANQgSoGKpUy8yDbvAcvUJGMdqyK5Gd5lvfyO\njtJ2tNhVGBIWKie3bPGjeqkOHhQgIjfDHyyEF2V3A17zJaMbLExCRJ+gkGU6\nSOYS\r\n=OPvg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1mtgA9S+46dnDhfom0TMejEplOmxsNSa02KKJdrLh9AiEA79BC9JIc5DxT1lMLYkjmd0zvlRQIiCZWmo/peEQCkmo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.2_1594820380596_0.12811547392259026"},"_hasShrinkwrap":false},"6.13.3-test.1594832770423":{"name":"ts-toolbelt","version":"6.13.3-test.1594832770423","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"c66d72e6dba2b0ccb7b6ce8d85d1090fadb7b920","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.3-test.1594832770423","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-aOp5wNDEXvmWMPnmboNdwFZNXLD7M1+v2PCnJz66cQZCRhTn9gZN1YgXaFMEBfPP/Vw7SiH5928IOV+/fWnJCQ==","shasum":"a89128a881083f4c60a7177f26c6ca87f4a41c26","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.3-test.1594832770423.tgz","fileCount":6,"unpackedSize":437078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDzeWCRA9TVsSAnZWagAAlZsP/R0d0coejRoWlBGpRIaK\nkLXk1PQAEE5Zv9bgvIrX2D2m5dq55QmbkGyknUUTaieZMpqPdi3z4cyE9MMX\nU0wx9t3eN1Ni41rYKMSzJZLT67YQGbjVFRzTiKWRFFF4drnbfPVijW+e1dvA\nkop4WNnauCOEKmnyQewcSnJEYoJGwLf9OL/+P/9jc5TonMsTmsaMul/quqIi\nXKY2mH+I2EMcEe0bg6Uzq+KIU3U65Kj7GaB2ozFITxDroDzgEI5jhocH7CfV\n7jbNmtWwR7rzB6X1xaYpJFTm2U1s2GKKSMeCefDEP5i6pqlNDEPO3dW1kCrt\n27yGXM564OfQBu+WtxNb4UnGF61gR3zcV4zHPjKpLcmKfY/7WHOejhod1qHZ\nXgd9Dxa29XLGFj5SLYArUN9wnXR+x7K4zDjalcKyj1MHGFE9I7AQpgCSbKvE\n1BkJ0NQGsI8boOFiUSxK9PlsYmT9a3t7oWJGr52kiT3LKH8h7pWzMBNTWXEf\nYyG40vQyINOWEepEkv0CZMI5pk+ZQsmGufi7nYUvtWB7jhpMaG/AeIJwmHbP\nsLouXRH2P8+/hHD7iboIkOZirCiRQUSR6wWsas7SfV8maM0D74is3vcITezQ\nChPdWpjJb5jt1PpHWxXlIn+NedQaiAMc+K9SsPL6A5t9ee3RgUkHEDhk18vV\nRUAD\r\n=Pwpx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAvUz/z8RsvDoO10seykRW4SHAhDrknG+Pt7GGPFhZXfAiEA5qvnLgsCQy8HhgMMtXpirxwsN1slWYrBJ0gRVSHRHiA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.3-test.1594832770423_1594832789793_0.20123882883125055"},"_hasShrinkwrap":false},"6.13.3":{"name":"ts-toolbelt","version":"6.13.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"c66d72e6dba2b0ccb7b6ce8d85d1090fadb7b920","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.3","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jGHyL+HOdN5r5i0141Hl2Ebn8QblakOr3MwhkmiQppMg7Qge4GnskLwVWOgKiN2Aws6nMXK/dV9wjTy7C8rGNw==","shasum":"971f0299b0d14719b862ddd5d79b9ef06aba3605","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.3.tgz","fileCount":6,"unpackedSize":437059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDzh+CRA9TVsSAnZWagAA7/QP+QDO6lJgcDm2j8I+vbuf\nf7hy7YPC2fQmrRCFma/eZGqx0Kc3JcFarNAKoEtotYHfJvbICQPuOCL8anWI\nZaXbi3d4odyAGvmQL6InvUsi7TcslwiykeHuDKdOgntJ54kHRUoPh/a9IL1g\nQ2yz/J39S1FXygL1iSRMCOkwyvGyrTo4qvNaA3e1YXwtop3vYuBkJzs+ZrDA\neEQDtfVP959pLU86DUDOa6/5me35R78q1p9J52KJNHooUwA/MW6JnfQbZ7iz\nwMaRa8uGmsgQgF5yT1FrOUW6HORw4oN8ozvQzRgGpk1oi0R40UbSLYSpu9P3\nXLmGgND1ezRfEosmH/JfkxGrfBFrCDQWYATAuAtkOaVRk9+jplPbMuBrkq6A\nTijO44E4hXZtn0Px37kRcFo8RRFZgsJ3LhAC5hs+XpdlNMdvAsWpPMQNBzn2\n2PjIE1W0Onu+5iKQ4rrc8qrgMyVW2jAH0/xfhPZP1meQBv5HAbFDLexfrdmg\nsqPRtPx1sanNXfmNWDP7OGo7DTKAZZvP9kTUFAHUq1VXraj4D18tpqhF736x\nk6rnxBt7hWyyuuejfzq72YdnBVrqO/Ak5GXyZW1XOB1Pj3dp+G8EJN0GkxY1\nqHqOYzZwiI2eSyPbAolQjRN4W3PyVPgiXyk8LOD+cAx+L3hVY/gPQ/O93+dw\n6hOi\r\n=zW0J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAdBoHy95FiGwW+W+ujIvLVDdCnCSq1Y+2+OtDhup2JnAiEAxWgqbqO+p5/LiFS8jwp39Rx03MtL27ic2njpXX2oBJQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.3_1594833021638_0.42038140585610195"},"_hasShrinkwrap":false},"6.13.4-test.1594833294711":{"name":"ts-toolbelt","version":"6.13.4-test.1594833294711","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"2c3c1f47a0a30ae654afdc41774327b35d45398a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.4-test.1594833294711","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-R+3HLttEHSsejwxqY4lbG0IYHRpGM0ZL8kMv25xZjZsQnu9Lgw9SAvkK3IrXMn6UUmaGaLkewnY0g7rlpGNIvQ==","shasum":"30c2d9ebcb06244b388aabd6bea88e2b98e6b163","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.4-test.1594833294711.tgz","fileCount":6,"unpackedSize":437060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDzmbCRA9TVsSAnZWagAA8p0P/3NrMCDBWsdBc6i38cdD\nEnWG3uY8OqA4Fo2HM78Mf/1BD5/AjfVOkN4GklmwWX0WwMFhCUP04kXFHMIX\nOnp/MrPbFzYhaackR5lL8ThoW5T3LYDexeDlZraOo8Jnqc6e0OkQbNlhzRfj\nDC73uWqWhHs48h/iIiI6zIcxMT/DpRKGe0l3xScnDafpZULZZ08k+KFgfo8F\nv9/7Lvgzb5bq4rbjE8wLHdehzEuf5RErRCt4317OcB4g9EFpZZskz5QoSYk5\nVHO2HgTNpP+zj5+DQxU6E6P4UwBbY8NCWf0XqZBUXBRqPpR5cVxFZB350sOX\nPsohjXNigshLrSppr3mnS/zfjKVV0eRgEdPKbXOTNjgYWfRSicXF57SXYj+m\ndnIitBzVsPJtBoDm7godRHknG/EfrWGSLEyT7E1Ow2wwu/8SYv9aA0kP50hp\nPF060UdIuX7vQFPVuYWd2pw5P+Ni8lWVNHKYhudVKDxfRUzZSFvCfdM/Vmx3\nj2rs2hCnpYPlePOZVvtSdAk0Y6QLMNbpd1HTdDcTmBxSpB9K3yqF5O3Tm6eQ\nl/1BhmNU8tPuUaHQ8rDMGq9KUPHGG1qOyuZRzjy6VEZMVhdKirpguDZgMQir\nyiV26bDaWnMu6phg0b+D/21t8AtHICg4IB96/NFvHjULcVIqgriHhH3L9XPS\nhBUD\r\n=NWd+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBGW5KxbIIR0ULLQv3HvO4v1kUh4byBWTV1Z6zXbmh+AIhAMvWX/cPhQ5hWYbEWizlYY6YLv8VtDwOgkhFu/nAy1MN"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.4-test.1594833294711_1594833307374_0.03807367711785692"},"_hasShrinkwrap":false},"6.13.4":{"name":"ts-toolbelt","version":"6.13.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"2c3c1f47a0a30ae654afdc41774327b35d45398a","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.4","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6DJVcjPYdgF0NR2G80vNrRAChgks16DQ/a49UzQOF9opMixAv61vCQcSUSKX64sXAf2OKqke0gapxtTZGE/qrg==","shasum":"313a1a380341c99db3f669cb8cdbfd33354aa98f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.4.tgz","fileCount":6,"unpackedSize":437041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDzpqCRA9TVsSAnZWagAAfFMP/Au7I/Ub8IVEJuy8w7j8\nccYLoL4JUzhqDC2jh2x5IvNqxwPqTgZLdSsvw4WjyEke90HO6QnAbXjzgcrZ\nL4eUyvPyUHl0ZJPbJGd27o5bQRQhNtpvv0GJ0zCDzg4ZVtIx4Yocrw9C1DLN\nJuS+fEGQgEF/NMa/U7oBiWG3muVfVvs5+IW6SdZeYBDKwiG43aRkFLgfwuYC\ngjQjOE0YLvIAPePtc3yVRJuglPhTqGrOu5pFvTJCYRtW/7nQqBtymIPZCYf/\nTNrsMqT+ZgGkDfEIhLMRzSd+Wob6kbpBX4A35HJXTjGbOg5NreDMzcEVZW2T\nr8zeJ/Iv2Z83kP+kNcMp/M4HHk1TchTqUxMiZYp2zeIivR4zXf8w9THu8N+G\nv/mcT2jGIqZdYWzdmAwbiCPGByr68v96d0Gf/53V71p1JRiHijF7nB/OLQwI\nPmYn4MPDt7Z/EwpRaP6JFtHa+tMzOvxBCHCua35lcsEX9ualQYlMU7k/tnL3\n7TozSL7nDWo//IjZwuiGJ9bZ3+KTU5FVKA86OhDo3q7eOkp4SYxrG1JIHXcy\nkB2CLie4Ctbl1GiWthNewJfu3tvAdxp3H2DxSO2dsG8iLKiArNdv3jALHtFA\n/m/gXK3BYextGOg+BLSTafmEt51dO64/YllbmdfvJfPgnSZU9QxvK7H5/Wiz\nW03z\r\n=zSwE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEz3WAGGcxELzDU+t3PQ0cdI8l9CikEmf1rG3Z8F/0vRAiBOTnSs5NJJ18WYeewhBck6fGmuFC2lDP2Y/UYtrcvIGA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.4_1594833513774_0.04529979432661402"},"_hasShrinkwrap":false},"6.13.5-test.1594841518492":{"name":"ts-toolbelt","version":"6.13.5-test.1594841518492","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"f7b8463b1f4229f764431a71e6362928edfc6c59","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.5-test.1594841518492","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hshI8kI/hmO0yWo0aYWkg8rbYI0dy9E+eLSas4dvIi7ACmSpBw0ieU/XSF3/WY3Z2DoHwkpc/BjVeOB+MQ2ScA==","shasum":"c72ab598a00c69cb6057e361186225884809133d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.5-test.1594841518492.tgz","fileCount":6,"unpackedSize":437318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD1m7CRA9TVsSAnZWagAA3ScP/R8KXZ1HHwQ3DGQ25bzO\n/KyFgVHKZBVgvsn1VEbZBC7ztJlFSjGO0SGgexHvcpmB5gi9D2YrHKOmZj6x\nb/KMLvzYGr6YZXXoTzHHx0UN4aX/jmSXaVgXlpjjzhkH5eVY6lzsL6xdFOFe\nElO6F1jzBOhGiDcKeLQGkP4HqMHwXoxp/vnTAioKmnPzG100HQZRtvMVNwno\nltPWmpWUm1fWFqW1Oce8zH3SXgNGaUc9yMC4xj9v4XY4G6VlgOzCwZ3ghrb/\nIpGD0AXtKXUqZkKzzobJh9UpJ1zOBAAMVy65Soy8neTTlzdhfBy2m/Mw8q2Z\nWBzdTINGfj6KsIaNob/3s2A2N9J08S/HzY+WqGgt14OBjZ06I6FCN6jpbNJb\nan4VnyzUJ1FRXU7NC4mLJTzWR2CNbrUJSGdmueCE23qIoU1hdpYvMaVgyKo5\nDgHpf305zW1jKtEbOKxiFzAtB2l/bdKJz80jvMPW9/LAf3LxA4DUU9P6OPMd\nictVVEKg24uvGSANpoBHNDSWa00TQis5KskJyLHnojpw51PquqQj003ADPXM\nuDG+ZU17ufBh9jyVCJB4ja6nmhZdlTBd9WjA1JzNZh2ckLkT8/QJsACebjMp\njil/jDA+2Dy78g3WCcPQ9Vn1pXM0R97+7IVAHxoJxwDLm/tEpU24l+/N+f+m\nMF9V\r\n=fN+3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVZhsOYcnlGLgBWZwZhQ9YOljzPuMpBE4W3Mtw/hPsRgIhAIZc3xCFXl+XmTJQId5AQ3cn2eC5GxhcJIdEniiugMEG"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.5-test.1594841518492_1594841530891_0.9432742444882396"},"_hasShrinkwrap":false},"6.13.6-test.1594848698379":{"name":"ts-toolbelt","version":"6.13.6-test.1594848698379","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"b8e2dcf850b7845197ea239fdb881718aebf1bbc","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"300\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful type utilities.</h4>\n  <br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                  | List                                                                          | Function                                                                                | Any                                                                                | Union                                                                                  |\n|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|\n| [Either](https://pirix-gh.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://pirix-gh.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://pirix-gh.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://pirix-gh.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://pirix-gh.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://pirix-gh.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://pirix-gh.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://pirix-gh.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://pirix-gh.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://pirix-gh.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://pirix-gh.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://pirix-gh.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://pirix-gh.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://pirix-gh.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                    | [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://pirix-gh.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                         |                                                                                    | [Strict](https://pirix-gh.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://pirix-gh.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://pirix-gh.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                         |                                                                                    |                                                                                        |\n| [Optional](https://pirix-gh.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://pirix-gh.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                         |                                                                                    |                                                                                        |\n| [Overwrite](https://pirix-gh.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://pirix-gh.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                         |                                                                                    |                                                                                        |\n| [P/Merge](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Omit](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [P/Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Path](https://pirix-gh.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Pick](https://pirix-gh.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Readonly](https://pirix-gh.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Required](https://pirix-gh.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Select](https://pirix-gh.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Unionize](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [UnionOf](https://pirix-gh.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Update](https://pirix-gh.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n| [Writable](https://pirix-gh.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                               |                                                                                         |                                                                                    |                                                                                        |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.6-test.1594848698379","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ICB1uh1oupMQI8YA4QLioBIKqkRpRQ6LUGwe6RkLOBVQ0miS6hZ65eaKh3IwzLuQB/ZbdJXacbHfRQnFVCGn2w==","shasum":"e192fc8df701c58ad55c5ba10acb5a82f5ba9647","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.6-test.1594848698379.tgz","fileCount":6,"unpackedSize":437914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD3XHCRA9TVsSAnZWagAAgkoP/i+n5b9gtDRvYIBiUfZK\njUL+DCsUDfv5sN3domENnyjBADDqS0N9zqG4LKkivCgQOnkp/IqV9/BV2jwn\n63DtvBCni3xP65tNaUO/LYqAM75Yj/+n/ec8/kK5SAAuszvpf67vhRwQZAq6\nAcxJffOpEi/Q5W3CgeoQc4hwD3C6mvt8aHDdmp0VEqSimjiHNfYfTG2It235\n/TUNxU0fMYUQFrDw/AX/oOpNFx9L5kKireagjd4PNWhRq3mc1xoSJBmHb2bt\n1/QnOc2qId61DlZq9LD6WygkN5Vu4MOcvcksC0gHEutonxxQDV7DFHgUxvXr\ncTtJBdH2shiM9pz6xNSorWcjd/WUI3MEaezTJmK1IC9a+wrANqG7q8MPSNL/\naEepFDF/WjFbUQLXXpTeZ6BaBuodIpuDR7omJ56mEr2ACCrvTVqeLvQbmGIS\nOryLL5UWjGlvMXYvMyLZJ+MnyAWGIOMbn9mW0DR80OCyspo81zaKtIo/vm4m\ncT2uUB5JqILD7U6THUYJMB0MfF3sZQQKj/492qEjfCCvnXxn8T5MOGb4QOks\nbhw4ReklNuDWlmohQTlNrukXjDUng1L7cEs8nMjx2tzYhZjjVP6nzkc5D8BQ\nSumHLyXpov1BN9/BMfMhpflv2JQlqxM4O7u2TeGPA5q9WCpCqDfwZduzpHIf\nGNey\r\n=8+M+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB9gxXhyxHZPRJBz1kJfsI6s69BGhG6QVNF1CPTOAAlNAiB8KBDkAoDS4KTXladMaEi7ImpNvudR3cELOZ0s20Uvsg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.6-test.1594848698379_1594848711352_0.4079228698405064"},"_hasShrinkwrap":false},"6.13.6":{"name":"ts-toolbelt","version":"6.13.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"b8e2dcf850b7845197ea239fdb881718aebf1bbc","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.6","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qqIexrhqCNOuSRCrJMOKor8UJxA4DYMB6fNpBmRAKJgmLXNj8TAiuCrs7Nm08fva+MEdQhEXmsnjBQarNSIWZg==","shasum":"4c9fad69bb3389323fe60982f18cd06b72f7d42a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.6.tgz","fileCount":6,"unpackedSize":437895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD3aWCRA9TVsSAnZWagAAKQEP/29WQsBwoXIfL8DDWfKA\n50+RHNwXXWCepFWKD3WaZx6amhVOHv5Cp9ggPqz6bQSkeIS6DoHTeN3QvAAe\n0bf87SIDa/w2KWb+xICeeN9oA8u7ylHxlTs9Z5a6f3Dzq6WzzC59Hwftq7vz\nOOvRIbFUw1q3AK18sAgjG51YAzNR/S97YExAQ1Nd88c1GFXpW/wDVwvV0407\n/GuP/KBrptwIq+PNFZ8SgCtAt7xuMM3WpkBA73qdnbkbE4pjeN++6Ig6O+04\nCx0RQkf1+Z5aQ9ng491wU8WditBUCtXJIE8wOPQFsf2oNb5FrzvAa248ZoD8\nozsXJAyq7IYQYeo2gwfbTgIlDY9FT4ImxJkF4VGSaF34R68euV8rT+wY6EAp\np3PU0yUQNzyYHUY7pd8+dt8/R6YsjCAiZvARw/p79mQE+3OdLLbzobyzskon\nPoBXLqo1vpTB9ceG1A7bJovlc56m+U1jSpKxMEF2Q8h+Ht1S5A8IaJh4KB4W\nEp34/q3IAGKzXRH6oJZjUwMJ1EiYkSKYhPoDFHY8m1PDN2QS3uQSSn5IiZNd\ntAqLnOMVm22WqP0Iqe0jSjruvlccJ0hvBqKngPLJe3DGLl2o3/bO1N/T+hzY\nOcip1CrxehH9XeZ+/jjFab0uPFRgbWqJvs6nKZbMYEeLUOSYiLP94wZ+Czf2\nNjJl\r\n=bzx6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHB51wzeL+IhbSwOVDuq/7HvnNgM9W4bf7uhmU6nQI5AIhAKKawkdnWCwtvS98te2FZgQzOWYB1e8dB/yKlM19a8nr"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.6_1594848918163_0.40942821883157743"},"_hasShrinkwrap":false},"6.13.7-test.1594904316672":{"name":"ts-toolbelt","version":"6.13.7-test.1594904316672","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"94fad024f6288c4bb940f06bab8e8b52871dbe2c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"150\" alt=\"Logo\">\n  </a>\n  <p><h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n  <br><br>\n  <p align=\"center\">\n    <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n    ·\n    <a href=\"#demo\">🎮 View Demo</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n    ·\n    <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmillsp%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmillsp%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.7-test.1594904316672","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-cFSvmnq+mcvPxkEm/RKquISvACrEEaDdiZgTmU6ghzkFe9tNlWmoRB3RsmKzzCd0wIQxZ5nn4GewEHkLxEWGvw==","shasum":"7c8216d5e2d7b00bf51a3df92f4be0dbc0881145","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.7-test.1594904316672.tgz","fileCount":6,"unpackedSize":438052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEE8LCRA9TVsSAnZWagAAuOgP/29x7IPIRRvQrpXc+MPK\nAfAZZxpsbAvItmeDRolA+060JBjKdiJE3u0Hnz4cpwP1BddVBrgtDy7P8DRd\na3ofFNbU/eBvrgxiER39nTooFDyXzizqatt60TbYeUWCII0RoRxrW8V3NiBD\naHNVu7qErzN57BSdQbvdaC6kxQ0OAhhkJeTp7D+LA9hrA6arSGYFLHq5X1j3\njVtG0wXWDcHHm+F6WTYl+feVnnSU1C9a8gYB1gClx8wTcbnyW5vNSD0zIifO\nTGzEqqnvebiIkXikfCa2oPdxN0vDHwT6l+T6WEM59E800d+anZqQjx1BGZe7\noIzXorzi8IiaE62Yi1Z09+ABlUo4ff9mKAYfW6SpRPj/jHWJw8lurOa+4Mag\nEHESGreAz2NpxLc8K6vm7wQI3uegsoUT5ehcx6e6LAD/zFitjv5iqDDIfNar\nH//qlUUEfkZ31bIGD54aTZYdTYFYqVx24t/W2bBEa32bb6TGgLvY7x/F64Ht\nYFlO5HEa3KAla62tf2c75BZL9tZB3yjjAJmXjB1Pxk0Cz9pkxtwoU6MHe7Yx\nd7Y0tbe9yPIWhX0cvCtqxiNCH4maetIhghQ/WoaqqYqzs4mWmsBTnLjEA38W\nGi1g5OGWYERrQ+nutA65RfO0byRxqJprjVQJKEsKxwSvnyplHeG6kn0vUUNv\nBPtC\r\n=1+59\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENoiUJ6sMJYufgAkjIKCIHtVE3GJmprjG3c78SLmGKoAiEA/7uAheXCq8ujGnXpAebkjw0ShfoktzSWxv+BxNgJGq8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.7-test.1594904316672_1594904330601_0.7780069922582971"},"_hasShrinkwrap":false},"6.13.8-test.1594904910732":{"name":"ts-toolbelt","version":"6.13.8-test.1594904910732","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"43542e4d3cef4eed146ff89184380e608ef83867","readme":"<div style=\"width:600px; margin: auto\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmillsp%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmillsp%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.8-test.1594904910732","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+HSO5dVSWoT/cXCiwFo8Wj3HY+15wFeu2B8xC9OpnBVqzaS2cfoUWxKmhdoznGSEQIoD0XhIacveRwBtGU/ydA==","shasum":"f1fc91762d56865738b075a8b17088e286548302","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.8-test.1594904910732.tgz","fileCount":6,"unpackedSize":438258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEFFbCRA9TVsSAnZWagAA840P/AvfO5CccvqXQ0GmbY+7\n7TAr487MAQOmAXvJqfivBlyUtJfar2g/r3s/L5XPO93R7RXKmz8KAKF+H7u+\nGp7/pEUl3Oj8VBFEeAqrBYlOKBcTVfDrni6MWdCxZTkx3Bqfu571rWt3oHs7\ncdFIx6115RAUsCRdii09h4cqI7VHNL3Ly5Y5UYrvceScu28IuKqQhhUuJSKL\nUJ9rZjnZFf23koPJSzdMKI3MaxgXi6km+KBkKPLlL0tK7jxatZKnnAHZGF89\n4CtB3Wqh7nCfcfVc4bh7t5YvAkZfMZDtHtBl+cA35lhRfCESu8ItGQNTmD5Q\n5EaUxAhGrdgXUTRM5VGYiPBPSw51tVABmZfcXAdhCdsEbljtjOmq0yslUK5y\n9CyRH4t2zqW8+DP6rf4O7Zzt24d+aa/kpC1TT4RvklbjvkjFlfLPx/ZArgpE\nAYLTGuLWr4rtCIxe72E8u/5Rh8NQKbsa+ugUcsmkU0Kw4Dk7x1Ox69FCG3fW\nLJMM24TBDsXAtwoNy4Ff3VCbmOtixN6qy3g5w9hOHGcoAxQd+Jgc6OEgsPQt\nFoadVFpF/cAkt1L+rXPDb2VE/wqu6JsIT0BLfolTaSjpfhVp4vw7BLLQ+ZuI\nKGXyvpt39CvaM221/q9bxhbZvPsipb1HfYw36NLJM9lxkvUAz+2x62FP6DCm\nDvZ0\r\n=TiuZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBF1AY4KdLqPCFqlmt8+bBcBP7Y7TPeAy6fDaVW5NfuhAiBIOm5hah/bdLavVkFhwa2TpCCc8f8axJaKBgYfp+65yw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.8-test.1594904910732_1594904923003_0.38787027577498057"},"_hasShrinkwrap":false},"6.13.10-test.1594906276080":{"name":"ts-toolbelt","version":"6.13.10-test.1594906276080","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"3004a93f1e0a645d90f0f232bd9aae7b706ec803","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.10-test.1594906276080","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TC9Ea0wmyxIv1WOaZIRenyEkptAfHAKtjvagpaf2U+1Hjg9dS7PxvXiTUhZGPrxxzmvh0Y09nA4cJkBr5AiOeA==","shasum":"088bb6c95f0ee03c1b66a41bb4b6578d19dc97cf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.10-test.1594906276080.tgz","fileCount":6,"unpackedSize":439000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEFayCRA9TVsSAnZWagAAX5wP/17gFSpVOFGwEvc3gBP9\nZIAc8MBNpoZZoMf5AaO9kY65SuAsPcOH612ustsD065pV/Q9hMxjdLekMu7S\nt4NDbYrWMZcTjm/X3W6ur1aLd43k1VpL4QccRou+RDAPfKYIbCoS3REi+cIb\n1FCYt8ufz5GYp0xP5G0YP+RqThTnIfCfjEcMkMogCBvgvxFvFT2/eIDJq+GK\n7rLNrXTlHCLVvWjIpj0DPK7zAm3Z+wH2sAk87E9GgqJhf60f8xJVWoVZxgxS\nPo7qxv7La2+oB0ztuDRT8utqYMErz/oVD7ptSyOeWE85tPBxenjVqYs6Ll1P\nrpdyUUBo9jy4O/BcsRaUODHA+5tn8ARIOtfmhBOpgvgBj8tL650NmsobXXfB\nDQ/pEywV9AKH8ZZJk8c8KStqQQo6+LnQbXg5JE3uQjKUpISpIR3VipD1sJ+p\np5ScHy0Jfc/dqcZpWxCUzR0Aa5dpOrj63ZU0ranFYy1rLN/M57qrewVTZD6t\nrpDpX+9vsGXnlMw/+VNIY3fY8Dk2v458c68SOpPiNee9qv6dg07fatRkGK0u\nScnH7+nliqsZx5v/KZM4NSwGPPp+hHDL7XoPK3cIXdSa05KGQiKGlaFTvuNA\n9bOl7IecvmifXmPllcTEBJ2TWOF2JK9Rga4AVu3DVQ8TFd6JU9Wb9bR9nCsz\n9j9l\r\n=Stuw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICIUt7q6gZg0p4N0BLw0BhQCGMN+R0P5ViSSmaFmSAK/AiEAj9+MTHvY1c9vTQ37gT9daEGV2f/KW2qesZi0+hU6wso="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.10-test.1594906276080_1594906290290_0.05585482930137031"},"_hasShrinkwrap":false},"6.13.11-test.1594906424303":{"name":"ts-toolbelt","version":"6.13.11-test.1594906424303","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"8df7c68e7595ccfe3a29ef85cfc381034d8b11d6","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.11-test.1594906424303","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-h3QaGcn2AygtLXbz+6a8/Y2B2jyJ166CmMIbxMrxLtRU7FNfCPpYNFyr9fqspAVyeczk6+JVZY51A6fpSb17hg==","shasum":"f1c3a4695e7df43ab19d90381a99ae91d3c66e2c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.11-test.1594906424303.tgz","fileCount":6,"unpackedSize":439222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEFdFCRA9TVsSAnZWagAA1isP/2ZhZk3tMxR5pCC8/s4i\ntwS25dLsx7Y8ESfpaSl8gzvbnM3AD/m8/PmJF+9E7P8V9hDtExzCNwuio1zV\n+sGUTvf515UGjB8V11HBXWto/aX6uTB1JQw8/nvF6hy4lKZtg8X4Dc7rFuT7\nvpT7q76R0mlRLMzhSFmomDwhVdfdPXiO441JIeKgEkly4S0hSDa7oXyak+aK\na0OZrE3616wRRAJe9wbVmbtF96T5T7+SprPzCjfrK8e1drpW6lmVUerAL0cQ\ntJS48FkDaajbZR3NFHnFJhFhg1ZmYb3ON5edAoFM45dKFaCl3+Tj4Sx2dC61\n9tEz55xMr3gFt2DmgHL+Kw7jzdfL3f2V9/BZMizgclaTGqMKvfZy1ldAqP8I\ny/ohqkUEI/at19Akg0Jq7Nv16rsf4RsJUVGNfpE+BMZ850CUsMbmayNrCrwR\nSRtGd64/tgXkJ+IfIJuFMv4VoEDZNbEhpbb7TRlWagm7vmKwUgaAS47AoxZD\nm0H4eNibrvSE21w+YF8b3YM6hRRYdjvKm+955dcLiFMggBCW2KSgcKCHqsdO\nrMD6omHdXwkSu8gxqP+k3Yqrx2Apvq9AMoO2R76u6rD9vFBxRMSfB0S1PfIS\nMCmuSWT1cNbk0GNgjMLnNLHvTkHcSVn9GqwhUnPSTm7NN/9YPG66Pqf/de81\n4wJe\r\n=w4Id\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIB2mAPRYOTCiJ+11ONdSrDXIt/tm4E1Ks92ts/00LmAIhAK2NZZATCCAZ8sa6syXZ+YHTtSYU7zsWi8dIxzfBbMFW"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.11-test.1594906424303_1594906437469_0.8783086375353182"},"_hasShrinkwrap":false},"6.13.11":{"name":"ts-toolbelt","version":"6.13.11","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"8df7c68e7595ccfe3a29ef85cfc381034d8b11d6","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.11","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-QmvHwAofS1MAn1ndXCn2AVhxJLipaj4tK26SrhBTiydfgKtbLlU2efpIP/8Jocrc9ynNslZqrhqAesruJMlxCQ==","shasum":"46260d1cff0f2d635931df8d32239b73f2ed4f8d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.11.tgz","fileCount":6,"unpackedSize":439203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEFgVCRA9TVsSAnZWagAALcAP/2XRIgwaINdVkQhrdP2p\np6ua4WhGKg3v39eRK83IhHyi9MBEzjehfRAp+aCVebcF0df+rD6rPl9r7VEz\nljlgRBqUhQ0ZobWs8VPwuh6123GflJLyk9ProcggtLzeW3qX+H8RPyxoRwrl\nj9D4ZXUQuKhu3nq00pMV/QP9oJisy/Wswkfu77gWOgsm7PQuj6SCWvrSa5vw\ne7OUETJRkqWlptNPH2SwfD5uGUopsLnxtp3GdQvBxclaorwaqjysgn9F26kA\nGGTpYAbXfFDf5mv4fbaPbrcWkbob+6ve+aFPHlCFdLTKLPv2AwyYw3QLh0xU\nqfh2pm53sARzd3s4ziVI5lld/XG6NJPc/xcdOObO7rHPVkA7/HKsLtSMbBdy\nU/T1r9QTp3S6ClpRjXZ6wZLJAL6gG5+wyDM0fiC15UXNfwhOeRSHEEQlrxQ4\ndx6vHkWEd0Auwh0D/x8wQinKpHqhEA0D6rXxZXk6XAujg132TZ7cPdtZ10cw\neb+95OHS/7EZtO7etNlv4RykpLARhWrxuNzWZ50nnyhN2v6b/mEX19GhSuab\nO3tuMDWg/zAnga5RKy4fWQY/4NTZkUEh5hGXCMT0VhLorBabvM1a+WUZzRUu\nh5fnZ7tkjrYsE8CT5QMjeaH9aU0qNrrqlxI/OEOOmW/EYALPXjKKrtp4eZUg\nfhrZ\r\n=Xl6H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjTpfJT6re9HGWchzHCnvy05PKBZQSTaSgWJwzX9h25QIhAK3xLPoQ4vco/HPt9lKpxtBSuZh0PU/gom0FCqAx5dPA"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.11_1594906644875_0.7862057856734297"},"_hasShrinkwrap":false},"6.13.12-test.1595260759175":{"name":"ts-toolbelt","version":"6.13.12-test.1595260759175","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"a5bd316d35e2c497e25c4c2016bec1bc90e3851f","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.12-test.1595260759175","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HzJaSXvnkgGQ9FDVTs20g5GT55vEAYoaRwQlNuKq2EKbLwYGYR5O4vn/jguH/WqMAIbaEj22s4HbAN85gH66Wg==","shasum":"7e82d2ab117bcd77269eb7f8e100487b8fdc44d3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.12-test.1595260759175.tgz","fileCount":6,"unpackedSize":439895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFb9kCRA9TVsSAnZWagAAUI8P/3U2OeWdqCRbz/+yzmu/\nc1RH0rMMBFmGPjR2YWt6k/K7bAwBd+o23YC5mZwWNljvRJ7fRszBnV8QP9JI\nhbFnPI8yt1mPeLencKTl+zEFKWXzLiYybiiIVwglJh832GzDK36xJNitaNFF\nkxXzldQ6D0/skIq6x2gmHbmM4esQu/nU8XMpYtHVw78ScOnORqSdkkWIiFsF\n4V3EGAZMlmTVeSMbL9K7Q2GR0oMg59wziTonLvUbY8F8ULS+S3sviYN2UWwz\ndU36IUfd1Le1ykXws9E2EbuAhM+tUJbSTyBpDym7Ppihb43fhvLgYvxm9KHO\n2D61JhRkmGrAZ4tuT2d49FqWBt4hfbMFqNbWcORlRH08Z8i+AYn1nK1QSND7\nz6GmT1PdCsEgbALi6RQDBYu8j9Cz/TlZyboIq7gV+TVwgvtsauFrhDUc6txh\nEzC/hKdWZ7gyfttDRrrYfAmtCko8WE0MEIbypbVGxM4jAhDCXiKfQVF4IxfY\nQAmPTBHaZWBWlZ2H+B0+qekSPWFFL2g34JNsSvPY/6G4CDBBuE5nO5T52+GM\nEoqMFcmcPpT+Mjpi127LZ44qBp5NURNJBKA2vvffCLr72YVR2pcg1wLtFTZe\nYZVhyhBuiTofRgICvPySUe2ZT/dRLzWbm0tzNR1L/sgwu6BCcUHPxl8Izfpt\nZ6+x\r\n=0jAw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICBjBEgvDq2oE3mbBZcu1PPN7YarMVpiRFmApx5lB1FMAiEA+m9vOSpIEJ8ptp998XiLAoD2WTqGldpOPePTJNbjbpI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.12-test.1595260759175_1595260771853_0.5179595637584198"},"_hasShrinkwrap":false},"6.13.12":{"name":"ts-toolbelt","version":"6.13.12","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"a5bd316d35e2c497e25c4c2016bec1bc90e3851f","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.12","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZVuxvLy5fh1PcndUTbXoJVMY0sq+70kNbXENrLC+Z2wfWuEfPEdvSJu+v8KagYRaidigvfDPRBHQv4ObMcOCjQ==","shasum":"01b270042246930bc77439739d1e27aa4f0b51f7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.12.tgz","fileCount":6,"unpackedSize":439876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFcAyCRA9TVsSAnZWagAAf2cP/imBRBrEOWfFFsuprMLa\n++Kctsv3KYHiV27q2EYwX8S7RwJq4fz7BEoHpbCvDldKzIIRJvPT/Ok4Fx3y\n5Jk5ycOOZJb8xvHkCciyydB1+6qsDR5ydC6lK3ge70MNUrGMzoV0m56rE9xz\n2Alfs+VtJhzPNTmYuegR21WFyXDyvQjJV1hpmvVqv6ednlXrv175iRcg/Aj8\nwDd6ug6uL1KXTb3OH+lFshN72i6M6xmK2RkFVNGV+cqY9Od+q3qD2M5CwaNu\n4gT3nfFhVuf1MKpYBuopX4qgHDk6M7SVqGD0+BI31YXjp6MdBccPc+qHoOXl\nC0kVJoS6H/3V+DF1uwMDvCe+QrazDw/hPYp/F41x0S8whOAIkRTUDAfN1sfN\n/TpwRR0SGmZocChW1cHXPaib6mEuewCR+KM/tMNlmasADPYwRA094wZbiU0f\nrEPXYiqC3+0puibLsEk68eyl3q1jVxwiCclkZ4GkTdIDYpWdOlGZOQP1qR3p\nTypGYtBKDUcKodNg6aIsztfuO3p4dy5wjgb/XLSaFLh7XoIcRelu6uB4nr1k\nAPrkfWsVFFWfJJuQJkJy/bP0U4Bl4tOen/BA23u7q86dJZmRA1sbLGYyxjQS\nUEM0rUlWy3hS9giyvUHMQ43YXQa+rg9XceiQ0Aysir6t4oBg7fw1pyR9tTsU\nGWVi\r\n=k4I5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDh9r573KX0hCFfUQi5eoVIVMEwuuaSxTf5pkHlCARevgIgYu3fC3t1ZAZZjcAVsOhVO2JdCq33L+3a5SSF2/zLe64="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.12_1595260978248_0.47109113363211996"},"_hasShrinkwrap":false},"6.13.13-test.1595264322969":{"name":"ts-toolbelt","version":"6.13.13-test.1595264322969","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"538a2e91835ee551c50dd0a5380d4e49f068462b","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.13-test.1595264322969","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-l+BdMabZETOspSeJs4b0kMnkMdBCvy7uJA7RPbOIwf0XX2VLchNxWYf1DYo8qA0RSTVqNhetouJu2bHdAWcG5g==","shasum":"c534bdd0ead1046d7bd45afa99f7de6db1fb1b8e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.13-test.1595264322969.tgz","fileCount":6,"unpackedSize":440291,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFc1QCRA9TVsSAnZWagAAFygP/1lbOk6Nk6KnP94iXueH\nNZljSpWV9+yuB1VQT9GFShsTniiA7wI87vwxTf1CuAaCK4vGJ3OzoqgDK9Tc\nVq8I36jbev2D2ZprWNHPfga0FDsR1uud8v8wEq3bHEumRPffIqDn1stbcF7j\n9u40mSI6T5KnwO3DVmlG+m2bAJsS2BSNkhwdtjKV22/ePb7LLYF8HV+6dz/T\nS/fnRAh5TN31JhTAeVKxWICOrV0LmlZA6LKXqWiuBqiSeMxK6kn7ReHi/tbF\nwObzI8akQq7WnhKmmFNWMidjTVtprBdZw5OLIfxcGlRpPXul2xste6qDq1Tb\nenhCrptL9JHq2feoJkmrA/iDB6QEzHYCAZ+j6+KyZwwfGXzWeRA2w4luaBJC\nnpfGRT5MIXwjXdhE3LbKB/CX6//DVeTf+bGT5mhV6w3HGRJssCodmU/XVPND\nnnnyA9ANFMfMQkc8mUiz3wr4yks1fuk0Artf2EcxO10+fO6D0TdLlsEywQGj\nU2IdqeMAZGJ903dHwrzDpr1/EicJ0M8T97j6EiQweX6sXr5JFprcy7aZ1KYf\nnOzyeXomFuUesdnSFl++BKb9TWWprmKWvcKijkXOA3KsEqzK201vpvMkdODs\nxU6912CI/+9bLsoYU0d3b1N8NC0GkbWGLUdLi0eyVLdQuY42jQ5PXBghk0GX\ndD4P\r\n=vhyh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiB6rMmu/p/B2PdaYXskfmi5YrudtB0+vGpq3d99T/0AIgP3UactYz32+ktXZz++du0pCyNFD2oBiosoXT9PyK3Us="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.13-test.1595264322969_1595264335550_0.726050237564279"},"_hasShrinkwrap":false},"6.13.13":{"name":"ts-toolbelt","version":"6.13.13","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"538a2e91835ee551c50dd0a5380d4e49f068462b","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.13","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-zak4BDiWoy17qMlTm4jGLl5Uqty494KNJf4e4nQim8ePi8L2GFOK3Vm5IkXI7YDiX0fi0tdTXPVX6ARezquUQw==","shasum":"224c268d02d9c6ec8215a7901566a79bfd3da340","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.13.tgz","fileCount":6,"unpackedSize":440272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFc4cCRA9TVsSAnZWagAAOlUP/j7y3hq35fypNSIJWRFN\ntGWWgNNU9OGprxVZG2NmAtD975q/mgn53NDsaSQ7n3dd2EpVmhAYERY4+HZ1\nNmBUuwVTixCmMYVss6k3hlbHHw4BtB5ALGw1GYoY2dfYC9OQywI/Im5LemHC\nOWw/T82RDGnkAI6ZvbgU3gHCD3PEBUbhLtFwIxoC+WZmZLZ70k38oAUWAOA4\nEJG6zHKHQrnGM1ap6YuBAXf2ZC1I1nEaEp8KcO3VboehM+FOb2GHSPLByVQd\nmqmh3hoWfwablSB3dwbpm4hrjd/DAsJNU2g6/GzTLlWpYQ34iyWng/GaYWdR\n4elG52lvGxRkeUPzYPGzTBcQhtDWZ/+l/2vqIv374O2UT7zwP3qbtgEG6w3/\nJl6vcvHUhMJzBXMZSZfF5fPnWRQlxkJPwgdFDW5ovSXQZWrDe8ZDj4NJD3bJ\nUj55gHiSnyuUW9+Jfe+o0MNPyTZdoXqcoDXE8+O9yYGGVUYbLZm0j7sfo8Mv\nmT8l/XQDK7nVYfsgjkZVXpWhmj4iOQ1eyiXowaiNAlUhItx46eZt+d4GXCPb\nBD8dtaCHJwGQ1dPKpdNzpyCt1fi1obkK9uP+mPRMrJwX03/IckEex2OLQDef\niSSfZpgynEuuFRWEj+slzt07/hazgvOatoHcidetKxTyf1cwUOnfNN4qBESU\nzMHG\r\n=CnIz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBpDWzLKC5tAqEWrKTcDfZ6EpnJlZ1Q3y5XpJjc06yRwAiAOEkC+kGoABi862Oj4rQesE5dFumFTj/JGF7lB8PSD0g=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.13_1595264540013_0.5800825236048364"},"_hasShrinkwrap":false},"6.13.14-test.1595266853397":{"name":"ts-toolbelt","version":"6.13.14-test.1595266853397","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"5d5aadb9fd15b08fcf7f3892ec04a0edeab6fddb","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.14-test.1595266853397","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-oC2+5JM+5EiVD6Ux1EHBrOyt34R1zXTUCf0l4TferNkdfHXZAohlmtHjNX2UwjfFTZhGqTjS59Z776QiYKb9hg==","shasum":"59719b4f7e733a2deb2125a53f7992ff376af06a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.14-test.1595266853397.tgz","fileCount":6,"unpackedSize":440786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFdc0CRA9TVsSAnZWagAAe4YQAJCl6kEiS1Q8ZUY8F9hu\n25ypYY7ez0J7ZD7s4JptoK5fk7VCHIaKMqLZkFu8DCwbdTiA+LZ6VpZm4Fzy\nq+Qsg2t0waEhEzrRT3DW0lWq8Z9SMR85ZpEyBFaQ56bl2QaGoD3zlt9mx3Uk\n9hhawrFHmXS75r64jA3lA1f3Y26i72yozcAiEkbGlCvV+m/tBvmk08tT6F1Y\n22n775zhcrQvbN/xxwRynWctc4/cbWwziwXZd/ZEPtIedhzQASoEBziQznXo\nhru1dr1EBXkN41EhS6Fdu2xCSQsynHITQXngLQkwWMAVJ6ubXz72+VafgOXi\nC0yZC3KvFL4uI4GbZXZMPaq0lKgncimDpgmeXHNSpaf37fXOJyO+kjjjZHgG\nptTsF3p8sKLN4zTUoboiMPDqAu/gSIvMMKK6n5toHUA3cWImbYXQ8EhXCMn+\n+/Ofjdds/har4tcn7MdfK7EIo/lIojn0gBt5l+ElV+0dU2Su3h3O8U26yy11\noX6T736uSFpNzsh0pfEiQ7exa8HxpJu4dTe2QAILBkUrOi03ZIQVnQzeyEPU\nKMuiNVd3ND8BWwBfYxwNAUFmEHichZ0jRnwDBpdahAfYA9qI9sWs5PReoFGY\nA+QIT5GfF1R+Rpao3NlPC1dg7dhVVNX/IBUsBAgQT6uG9bDLzPNofdEBJ0sn\nZK4Y\r\n=QZub\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDNCQfawyPO/r1w2ucJSPl/ApuqyyGbbYr20uqmIs/b9AiEAo3tfaCj+OXk2marUEa7JcmU6pZkWupOsDQDoIoEkWds="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.14-test.1595266853397_1595266867889_0.6378276339055335"},"_hasShrinkwrap":false},"6.13.14":{"name":"ts-toolbelt","version":"6.13.14","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"5d5aadb9fd15b08fcf7f3892ec04a0edeab6fddb","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.14","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-s5wMlBiElAunxh0zvumwd6kuxotC8uygsErenMdTIV8HColBEmT9+Dy4X+UM7QHzcYVi4+779z5b6d4EueTbog==","shasum":"b226a2ce8c1f0b9fa05cb0802e7abb0c0736bb90","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.14.tgz","fileCount":6,"unpackedSize":440767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFdgECRA9TVsSAnZWagAAckQP/jsuZSiLRxIQjIJ7gUkP\n0RtULnqplzayJOrFf8wCHrFofe2pp7Bxx6/ASZ2lx9FVkBS+70dAUOKyGeFO\nr7I9tDvgCVzH1U8LBLhfBkuQFG7A81gCzEPtD6mA1D5IGSODVhZE86f08lGm\nTFvVY8CWFtwvLXSDl0tkU3yQbDfSzhYTBJ6FEmz8/vft65jBloFXuRbnbZVS\nyMBWc/esLaWCZTKR/3kyqXTLHS2r/LbrXe2BRL5tko63GCLJUhUIuXCroxVA\nL3+CFeBOufwyV1CMVMd3sadirSckzKX30pzm9OqLTPEpgJaAnbFpLeDngu3C\ntqG3htUY2QTUWSTaUXXqH464mOVn23QgVhL9XHdUZhgj39r7IppAgaY3r5N7\nvdHe7YJEKsvLmeRZsIBcgDEPNGa15APuiSSnYnxWKiLBhw5fZZt+qUEa/C2N\nS4eWOJiht+PLI9RRLqfhLGESQc7P3GAmr/9cSN3QZK90lFsxL6dm5+YqoSK1\nJaDVILkFRT+hLEFioleJy4POKxkER5ocfjeWeZ9LuaUVQ7MjEnFRgQ1sdxLL\nGD4lFnGrBGXUAm9ZuCnDEig3tIH5cl7K4ZngcizCz7ZIa9lgf+eb7cIBepNP\n8xBbUhOzoQ4p4bYpRRVF3HdZfP/Uqf60+kpYP62aec+wVRwhcFKcW7gUHSI1\nYyfe\r\n=JdwA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6fnod09b3wDpAN4NQtBO6qrQHBobogdE+bsi+S9bM9gIhAJJqsu/Adgba7FznKgF2Mk1/6V4Ea/QLqJyaF6GnUa+p"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.14_1595267075276_0.48301666899913553"},"_hasShrinkwrap":false},"6.13.15-test.1595267799681":{"name":"ts-toolbelt","version":"6.13.15-test.1595267799681","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"2528449063e21195b283068559f5a25825029fce","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.15-test.1595267799681","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-dFEGAfnOt1nQq5tsh0R3D6Db2VKxSvXr/IOQlbPU96Ub8CTtHenr5AjCIPAWzK7aKGPnT0DpS/xmFpJxhhvvqg==","shasum":"1adff8080102639d5991e8f58499de703f7e7fc0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.15-test.1595267799681.tgz","fileCount":6,"unpackedSize":441132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFdrlCRA9TVsSAnZWagAARQkQAIlXo3gmJ68/2StQkL7G\n64AHxhzat93cqlfU10HbvLV2s+/GLGNojU14xpMk0Kb4UcTpbGO22a/Gm23+\n8cGBcP83gsJNdjFr/9TFa5sphCLEjhSZ25NEZTk+Xt60Zdh0KG3yCKxMwvO0\nT3lJeJqsMX9mhFLICylAO1db9864fSLhF5R1PMdlMBKKSiTcyuNbs6+1949Z\nd40MrYkBUt4FyjAfaVELEe/9y9gT9DZRRWfXntjx44e+qAEGgskMdARhbqM+\nAm1KdiMR3LlGdMfnVrreVABKJYtNG7oQpwgVpMERUCRP27JsHD1Jgd8JzKgq\nMaZ7B+k9Hp/sjVEEYwhflEfv0xJN4K+cd/HVQx3+jefsORkr70zK37wB4Y3F\nExorCnzHfnUqwmT7lkV8GNoYyQumCrvYu8lvMR2aJNCEJ0vD24M52QTV1EqM\nu97sEzUOt6NJzavEnAu0vYdFyJlm9GLwPFL18sOYp0JOVYd/7Z2Qn8Ri0GJX\nImQjFKe5JATSivGu7ht/BoDbUeWEbCJvdppNiqQwhtCwRL1KFelzTKMIN3xP\nPEOWRrFrfvZHHEq0xi4gszt+EOTiH7wnMxQycmikHNCuzk58OlHiY33oLVaE\n2BaizQ0mXovHKEK2Q+oCAyZargIdfmRca1VpfZgs+PVhDgZ7H0OnHc10Oib2\nLb6R\r\n=go4W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICAqRpTWKkV37mMz2+BllP/d6GSEJ2t7x6saKor8nOxIAiACeVwUvRiX8a88jYFtnRcjsfgSKB3l8htTApFoMOWRoA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.15-test.1595267799681_1595267812630_0.09903372396763732"},"_hasShrinkwrap":false},"6.13.15":{"name":"ts-toolbelt","version":"6.13.15","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"2528449063e21195b283068559f5a25825029fce","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.15","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tVKhhF9X0nMXnpSkXbaOlE1XOzmo4S7mJkoOHVTocFhnBMIzjwU5PwLSusDH+o3KlJbTRJkQ37iu92kX9vjDwA==","shasum":"ef0a78e2fb62ddddf6edff9fa32885de3f621c93","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.15.tgz","fileCount":6,"unpackedSize":441113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFduuCRA9TVsSAnZWagAAHUYP/0/tRw1aQ4UBvnI3aEtL\ntoNppX7Mwc2eS4SzC0YAYF0cJOKbR44cLPtFL4UbmWq/fUQSOAdRi01nTYxF\nhgXtzsGw8ekz2BXaysOjOZ6nsx3Jy0YHHyjfZrNKAZFm5zGD2BYV2RnIUViC\n5XBiJNFiAd5xGlg55h/5q6BwLsyl/z3A6RFupy/EqhIsxb3ni9QWR6m3S/hR\nJtVPRhbUYBRhvG3Q99g79FK5m51s1JA4LjEU7IgKgX601gMammt1eRpRp6rK\ntSb0GjpkyjxpsLyEomOdlPDlVvvmP3NWzUIN65dYAVbZawDYGtcMBlTYcJO5\njbDAUXBFbzPdWbuz02VNhbzFfJC4DpuhIxSOuoMxuUSkzTnuCCDVF0TFy8Ct\nP+yifHu0kgKPKEKi7ZKPJnCVTfe5x+DI7CXF7Cfzs0T38caVVwkGp97eblQw\nRqHozqVATAq89XBHoshIYD9WQqijEA7dCyp+bO+gnEfVoBKt6j5go1SQB0/X\nggml7vWtj3eT+XVd2tLz/AfqwLKoQIwi9UH0Iy05e3IZ/dcsXphwrUf7IDD+\ndJtPhaEBJxMK3qwOrZQ0nF32QwAp4+jPQFw9mx7r1copDQm1UvK6BMCK5pWX\noZOb19XbsUj2uXnEG758CIe0fyU9Usu7FnVRa3vBeQ/nKsM2SuvY9AqRGCW8\nC2mq\r\n=xbvH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFuCaQQnrKBpCDLEOXvTd75rC8mBSNpPrbU2+ixoFFtQAiBYAlAzvVI0tovFW6i4sKRKZ7XJa57y0pVDJLlCU2mA7g=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.15_1595268014257_0.23915875282510735"},"_hasShrinkwrap":false},"6.13.16-test.1595337622689":{"name":"ts-toolbelt","version":"6.13.16-test.1595337622689","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"e9f2ac1e5cfbc5e2a96f6d930e5b8f4569c670c7","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.16-test.1595337622689","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HkuPNvLOaoTKuv6wUX/sHdDZvn9XQk057qlLsEfaxmQ6DIZZfPIwJfRoXlnqLrGM8bJJonaMd1JgcDh6qrhsgA==","shasum":"44121e118b1aa76df58a64c904984ffc4d9e0eec","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.16-test.1595337622689.tgz","fileCount":6,"unpackedSize":441465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFuukCRA9TVsSAnZWagAAAmIP/insNSjmZbLvJSS3XXhz\nIgAKXVorjmcaZDTxzcX3ERICn+6zBkV/c6WHz4v/rF9wstS1qQWIPv/pD+Zn\nr7UjOHAH+wLgV3qPEdKKPaJh57WCex9ICfVEunXfJK5O2t5EJr3J3qLZITOO\nbdUBqJ4rpjGVthRrYTELIjqau4IsmV4+DZm+IRU/UyTqw8lLwbPTyJuJvmqw\nIAtFvRvVzLfDw48uK619kBf3AovX6Ywa99uyUjCyrhooYFJsWwW/jwcmO0iA\nNLydsFhNvehQBsIc8CWFbNcBR83D6uw+ixPFYk0/FeShaErXdkcvaRuXgaIz\nBYh/3jdGE+Fe5JSdQaUQ5HKNBLOakKraDs8+K/h8pmrBatP3HClVCy8YRJhr\nFjAU8+unvuUvmTrJZKo3iPoDDhOJs17/8jcoW2EHIEJQ/JKlqkqd5rOjoWL3\nj/HC37ZJA9SFhj0wjn/Pq6aOMJiH96s90bMR4E+tAgAKgDaEr8uSPKEoIZwP\nyt3ZUTV/t680b9vuYbuZZXYSDHhTRz7McbsiVJbzoqSiejKtURLHFsthc0DY\ntxtWKaMqOz+8J80nBHEzyeo/PYaXtoTgOICZeWbXejMEVqTtlWtwA3y1HOz9\nnnzbhO3T5TQBVeVB+VViqvv+5c4CbVNTPhIo5nSzCQ/hIbOsObtLyezFVxbl\ny8xs\r\n=UmPg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDzpnUHgfG9poJ38QF8GkyyfwlX03e/Tlcwek55Y6FvwAiEAtZP9h8vTK4pFEmZbyPj1dON4kxMaUW/MLckr3OWdIOQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.16-test.1595337622689_1595337635468_0.3510601359615413"},"_hasShrinkwrap":false},"6.13.16":{"name":"ts-toolbelt","version":"6.13.16","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"e9f2ac1e5cfbc5e2a96f6d930e5b8f4569c670c7","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.16","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-94xMvsZIUKCpGbL3UKyk9ujHf31lf/d3RCUMuMCtRgHSeEPkTiAer/2NbAqOWllrKVHDMfjShwJGlXuNvXFZCw==","shasum":"65107c5a356594b09987ee232705727aeba07851","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.16.tgz","fileCount":6,"unpackedSize":441446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFuxzCRA9TVsSAnZWagAABTkP/2H/LZrD3W9QgHUW0tHF\n/TCnDrywFLgOO8OiLsKy4jpLwkoN/9ctEYwQ1XY6IYzYAktkj4hIU5UP4prK\nrvz33Bw06mHdzIxZa6E6SkrYNMTqTNdWO8g9bIe1DyR17ZrBxfInBI1BApRH\nwSFmmje3UujdGzTl9/0AkMTTsYR0Lps6rwIPCufqFHBjfbYxRiEbEVAlKw1/\nIlL4ytgBRX6uqdMvzIW7jJhLjKrBLZAZyPsFd5l68r+To9IAo27WDl2pFRw0\nEijky9FqCzuZQ1NuCaB+duEHRWueenCw9uLRxkUyhdYHfVTzy5zE/3285ofz\nqnxmPaHemdX1iOG5zdXj0IhX1dXWsruldsQg/9ARyxeM5gji09IHG2xiNAwz\nElbvsfV+FsNB//oypKCZ/scZYPf5FTbuM63bYHC9pDCt/+5H4cb5a8V/2kGN\nHiAER8Yabl/07LdYw5hnLvw8NwZs+NS0T+pLX3r53E+IQQHLTXov5mbsdfMa\n1+8qcL8T0BOgbM9M6F+C/YYkGbyNNyuTIhhNgurDWyUVtuZPvurBYLcaN0kI\nTvOUdvSawF+1IgVEBG1ZfOWeBshWXK+FOpeP0cZ9idR7j1nswXNdSjE4Voy7\n7NN/I+K7mffYnPg5XBBhFGRLwY8mEhkaptIXJ2Za4cOKTWTAFDUgVLwaETGa\n6+TU\r\n=Qy6A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1vw44aWhkxwVw865ndmWyyE9Ns35chAfAfLWtfq+uZgIhAMff51QkxHTDe1SKx2ZnB/gnc5J7c7F57F0xPVdFOE5x"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.16_1595337842571_0.5669904988206769"},"_hasShrinkwrap":false},"6.13.17-test.1595341460555":{"name":"ts-toolbelt","version":"6.13.17-test.1595341460555","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"aafc9a5586314a87a95c57bdc34fe7344a56601a","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.17-test.1595341460555","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lFJOh5H996WBM2faiASLrRqEvBm82q1fSjid8mK0799Gi7oSPNG+kjWTUgNXcEohcFXFSGC+o0MUFVfUukZ3+g==","shasum":"4a692f2d3813963d099d0103973806547e3d418b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.17-test.1595341460555.tgz","fileCount":6,"unpackedSize":441690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFvqjCRA9TVsSAnZWagAAGMUP/0ztAsNsWsNFZxHRSbfS\nF2M8uME9U18YdAZvus3t04W9aSgQz0i7Q239QMwIwB8Aquf+9IJQNWW7eD6S\nnMYvH5NHXhwBKeWw8cy2XqXhLnwWyzTJ37qK2lu79VMAxVDBQJGcciV0OD4p\nhwnV9wgQujFcBxx1FL7yVDI0RM0F6TpYvluqE9u8pd7JJmA5WR0heDmFnOvy\nyDakSjDu66mvkLRathiu53FNhB5tjH9hgmMpO9MvlhGLum7eXGN4titFKXHH\nIUGHUodZbq8aDElrLdF66oOMork5ykFts3pLJtMHV3cu39CRIXnfCSER2jXw\nHkC59y2XMZVmWwsZ31szz0egMZDbpEnLqWUKpNvr86az4ck8DmPyPcraOesp\nxecWjRnBC5oGRtMaN0PPeOEuBnbGUdYVpAeqZdqVo7mtTU57jbIgGwbEYpCA\nGixcVHKSakEiGIs5TjeXXQGrcsXsR/M94W3WN48wWtKgHztUKMVjGdRSmoHo\nFRGa7xos6l3KKGq95+OAYrIzo4mpHWcokrBWNf9Uw7hcxAPIeari826xDV5b\n3PIW1M4MoJEjyrUEdFQMpsmtK3uGLsz36lZYdpfeYSqDbvgEZlL3R1g0ZjSS\naLZJ+5tQz/NB+pcvXgj8/OFVNw9ogUkJwhdu7ORd8qDmRvHkSZrb6+Fma7IG\nQNMw\r\n=z66d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEab0FvuY9cAaQyK7MTb2qZm1WaJN6OX4BmBTFcEM6R1AiAMhU87H/4sQ8gO70j7V7Guk3lgGhlObQcWk8OqZk2mxA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.17-test.1595341460555_1595341474545_0.5648194988820863"},"_hasShrinkwrap":false},"6.13.17":{"name":"ts-toolbelt","version":"6.13.17","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"aafc9a5586314a87a95c57bdc34fe7344a56601a","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.17","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-UcyB+MPdKSOtiPDDVz8+KPbQC2RSZjaPBWx2RnP50MdZ58Jvn2nvNjflsO1eHHneLHjLn3o07yS5nz0X2g7vyA==","shasum":"2b8a35c2a598dd42e5bb219f2a73e06f4636967f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.17.tgz","fileCount":6,"unpackedSize":441671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFvt7CRA9TVsSAnZWagAAXZMQAIw6pw7y0RImwQkB0paG\nH/MM7pMh+Uwdu6kaz6NvwzZfpNNNrb1wtMDFBhym2I35VzP7Sr8XARSe5Uf7\new+Hi1+secFY3kWkEq28PHcigrTUb7EkpfXUxFZP8fnCmAKwtw+RSM8wgZwM\nUGZwVTy9prK+t4gXcqerVxBzfVa0eBpvPmPxvc4V9eTg+dAfYdpcERHqE9bL\nvxs+TvN8rhjz8DtyU2QcXaeAIyrZbfI8QgbRvXbropoXFoLt3pSg/7hIRp1A\ncRC2rB5twZItbXL2KWDdapewki3kuJFuvo69WBUr42FRsmTQQeGfOTIzkKiB\nSpK04Mh/mQ7XDvFXzY7iYKflf0gBfvwvlP8Z096S3EEao8DXw04qbg84fLRX\nwj6pF0ifZd4Yv+DqLC4hSXXKW3ndI2JdVmVgz9xr5+wLIRpj+5NLI7GthZyZ\narTOhEpmZNlmUYWlOBVNtBsRdv88whDKvWYqSCqVni5IowsAXPVd9cuMFmvf\nL4EbKbXcwViwCQcjrqmDGG0jm5HYMW4pKyzS6c/AnBsu9U3aqH3Koy2+L2M1\nA2QG2RhhBr9wbyFaMDnd3Sn7gPiVicT8puaPjtl0FpLpIBpOUONcUotDOFTe\nck48g7Xvrb5bp6CkqUjXdmGkoGYDfr3sPtO13RWgVeLktOVUDpj2wlUMDNbS\nYt3q\r\n=q6hQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGTTm/KXM7Ig5tfQTtWzhiBqcFv8RXyGzGVcWr+/TpxtAiAfpgaPsEHYJDYkecxozp6nDFttrtmqjvA5jRvDrfvEpA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.17_1595341691240_0.6902026524201341"},"_hasShrinkwrap":false},"6.13.19-test.1595344044898":{"name":"ts-toolbelt","version":"6.13.19-test.1595344044898","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"8f1b39b294cf1b8e4b47ef9fca8d4b58fb774596","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.19-test.1595344044898","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-is9r4NePsBQJnMuhwcCF5CGb2yrKaciznN/DfrMEypH1sQOKIoGHrP4w8jv6POWBgwMZv0ANey/+LLTbLNOdSw==","shasum":"529d68139bb83e52afbb9ec90da472674c4d3b47","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.19-test.1595344044898.tgz","fileCount":6,"unpackedSize":441690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFwS6CRA9TVsSAnZWagAAnAkP/1dYhVix2+QzW4qIwzXz\nuO579brKSc9Y6ku1bjp5NHecUm2UdTdSM0PCZiARO1rVwOVsPu6MG0j5U39E\nQEk/x05vwkwLMTKRugiY7kySxGSoNuSCawQ4Fka+CxIaESIFQGI2D3lSApBx\n7tX02R77HbwnPqIgqHmnaiy84rBtnD6H52uJbe3LkkfUdZuq6z+eRoWqCZ9u\nt5kWhw9SUlp5ByhjAFp1m+eSmHPwCE53XmhOgLPn/sL5QSiQOMPe7tdnzwZx\ne44VTkGdzI2tEyn3h2hFRY8SdiKtR3WsvYaxhdfFRgYkvfP6gJd/EsT5j/Bn\nqZjDOOmr3XFtixHzWpE/Y/GDUOxYNEQ5RhvtH8ZP+o+atSAu9+rHYUf6UNC8\n5SLtfKiami/U+5Zw5eI4fJ1f0tTOqGDQFfgrcT5Sef+NIl7h+JDikVFN0lrD\nmy0voCsj+zxsaIdrX2iftjpBqyRZNBw5XotBXkPXBH1KzB9n+jp9cq1Uyfv2\nC5kYw//KA1HCtqHHHck+M+sDuVGoLsBn4z0onAO3T+j6e3naaaAbZukCxDVt\ngVATApRBxKZxtDBJWnMnILO6FmTVVv4en/0+cszQnofxBsa8+CK9wvTubGtJ\nsVSMozz1jG3sPA90+UeETwnyDKIeNGh9veVCIfvATW3GMIyalAk9GaE9/MKD\nWYLA\r\n=cGH5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAa7dpNt5Lw0rayv5YKcz7nUXrBcT+enix0fKzgLKHazAiEAtDTNzQR1RdXcQRpXav7Z2vIAke0+ydeB/72V5jk/zbg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.19-test.1595344044898_1595344058249_0.9362209382202418"},"_hasShrinkwrap":false},"6.13.19":{"name":"ts-toolbelt","version":"6.13.19","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"8f1b39b294cf1b8e4b47ef9fca8d4b58fb774596","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.19","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4j6coa+5CBYwHYFYUEDWBJT0db0dX6m6b95VqcvWJHamp+3nqDKEBCzZo3t8rOSklduuZL/L6ByBrK35Cbc6+Q==","shasum":"e46aa99a6116150e186c07e5347d826d1afcef4d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.19.tgz","fileCount":6,"unpackedSize":441671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFwWJCRA9TVsSAnZWagAAPHoP/2UlLUAAuRv5USr/zIpt\nlykclQDCv6ZE63VEovuxbVIDhcHUGDVKJXMH67yiGsYBOG5kmI66DAThUzsd\n6M8BeswXU2C6de+wI8ffQBk8xgjMuxFv3VZH6ybPkfIxFeCM/trfaYRwdUz0\naJiYzFNcD/viTck+Aym8sCB6M/8Iij016hW1RPvymlhzxZ1JVVnAsq4s4e2d\na/FLRUzaESZkESMv+5BGdcqtHVBctj6BHGJwpqgm8D1HmMcZ792147hcvHyt\nLQYgD+4Ko3uAC1Zf7/+n99mggKmnAKh0ACZdOtrerJwwc1usfPydSVGfzMCP\nIMC7wIahO+d0CTioREVf/NPTLMRo34/Dch6Dl6yfBr/ms0Flt/U2lWn/3V6P\n/qGWwQD8vp28dBhuxGl555zTjk//MC+TYR6aFgmdw1pWuXZkk3qa2vD1y6ns\nrRrX42ySw4OlUh4UtNmftiSXpPjGauywEgOfzxJxZ5Tl7Z3N9KspxmOBqYHZ\nmi6s3E2ZlkT2WIGggh61arJwVtHqCYfluessH9VbW98uL0HjehKRp5XrPlk8\nH7jI9JoUST7GsEJ64fhpr6KYBr9W/nYpwd9jluABEPkO4ZXFPaJaB9vtfG/G\nW4Mio1+bMJbm+VENkxJUtQ8fybF+cXLD93CBTyTcln9xhq36/TD/5mwFq/Es\nihVt\r\n=71y7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEyRZ6ewsLVBM9e6nj3RAzqxm3mUqYjSRzuHIx4pPefeAiBxWCjEXEZ+Gol4oIGwZ3bvqsifT0UuQ9D4/Ing92TZnA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.19_1595344264943_0.22719149216075363"},"_hasShrinkwrap":false},"6.13.20-test.1595370466255":{"name":"ts-toolbelt","version":"6.13.20-test.1595370466255","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"f1b2003fc92d9a887e20fd17b5a2b286cf52d422","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.20-test.1595370466255","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lVgUzh3I/m9wvQ9svjcRSOP/WesO553io6nWPzilNkmEVV7no8XCv0TLvcwdQxaBP6GOWufM6ay3d3C18MST+g==","shasum":"6816b8246bcf0c2e22a248b2c8d1ab173a2cc94b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.20-test.1595370466255.tgz","fileCount":6,"unpackedSize":441764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF2v4CRA9TVsSAnZWagAAaQwP/issCyefVZ0h5zyh/ly9\nc4gPR+gg/zbDIEjMSEYEPI6kgZErW+rufGjxDAusvMi7dCKr2Xt76TNNC4IA\nrfQLrAaD/0wvH0euVjI1wexaP4cWmNkpmu+n5R4i9Sxk4I5wiM/JArResWPz\narg5tJQ3cFuFCUKsVz8rAdS9YS1MePRZ8tyJ/mZ70mlbxoz31QL8021r6y0S\n6FLa6j3CaF5RcvSJOJJoNvG04nU0xP8Z12dWGiXw+f/jxPFHeN5oHsuVpMcA\nlB96m6HBVUU7BrwC5laEUxSvDsfTYGcK232asPBb1bASqu0ZCdK7KtQEvCyO\nPIZb76pMFpKD6b0BLjV23UVYsiIdcUXXhZOaa+Tde2y/njfSDGcOr5l6VikE\nLLnJlm3gy/kavI1nDbu1vSiNUGHDhQAfzme3WpOxx392ZkHkpx1e7KxWymXA\ny4p+Fx0QM9W+bytrHVozdUfCJSbYlYE+nyptjlszDr7dmyqJmv/rhTZX1R+g\nlz0tMnNb2WCIgUGxzPOZNLT2SsPArUY89v3WU1AEcIg6pt3x906qOvLqpGHw\n4OfgroYqAXzcgxT7vyTKGdF2mZ6Rs2rsHSN8qDrs8N2icgCDs3gqMeWvMhE7\nGJSYEN1PWKKpcbL/bS41vlxukn7YhofMQnt1be1L9oCmMHoOr2KFkeBovVc+\nVvzE\r\n=EHwL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeQnkEchpNqn+SwtGj5hG3C6c6rNQlbOvdxrhPiFoagwIga46sT+FKnYYi0t3/01Zl5OfdU9+YJCN2Ux1HdFkhGMg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.20-test.1595370466255_1595370484659_0.6565005214258448"},"_hasShrinkwrap":false},"6.13.21-test.1595373209931":{"name":"ts-toolbelt","version":"6.13.21-test.1595373209931","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"39b95dff7371b7a324a3052f5c4e9355ff7e6c57","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.21-test.1595373209931","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-UtB4JmWMATDlFy0i6/4DJwLILagIoRtei2l3hoo4WYunl2s9Xn+WlIoslUeO9w95/Tgl7G0nSm+V0CZBdUTvLg==","shasum":"d57230b6c1eacbe3d8032798e6654f116ad979bd","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.21-test.1595373209931.tgz","fileCount":6,"unpackedSize":441761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF3amCRA9TVsSAnZWagAASMkP/3+JixOpYNmbH9R86qvy\n8fFnvHsXp/jb4tIehidDMqNlSsDQbL5bB3UpNWnba7sCwZZIjN+/1anHcELj\n0TduHbVOOUSldPClDWRInorYk0Xgevz4odVLETmCeiDu9WSct1h/urWwC8Q2\nUFYQ4B2dBl+OjrIZ4VY9vLDwS+lkElGQA2Z5MBwffawlxjme9cZjPU0lR+ru\nlaCzVyhzBuPhaOdqSefK8hTCJmrOE2mgW3R9fTX6TS2f9zWlCefUIKaM8BqG\nPyhC0+BvhkUwFm5U0iqHSuimWSLNUfStLJThpWPKQbfqfRVia/jMdmcDr7EP\n1E2N53che3QOaG/+ScxDelckYb1OLgqYZsi7NJLT2gEXMSflr2DGvq8yTzIP\notzFr1Rwyn4nQH6zxDkibmdNNeEEAsTZs5pTRFS73A2xO4z9eM0d7Qch/6VP\noJZGI+W2HqSpGUoYNO1Elbr9emY8rwzjZRUSEdW474/9bJaJkOzFR/eFfmzp\nx83RArGtMH3BG1850gDOetfIZpVaT8+xHR6dCUEbyt3YU1hsFUCkxyrwxhZl\n6l+Ge6fLHHqtvsh+vnQgR5QJ3+EIA/gp/RJjy0aIgJWQKYZnHnGiAEUXE1M6\nPVOrxGoHr3DLtInNQCePdhNLfthcTu2dorjJpMutnHs9HxSfqWv0Tkz/MUsX\n8DdS\r\n=xfAt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4JIY/SivRuF9kFzmvkKpDqFD6RgjtphjUu4mLcEkUTAiBkASt5thrRsgAbJA295I98/f1LDHBSqZsD/JcCVY3jfw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.21-test.1595373209931_1595373222421_0.041818678099572626"},"_hasShrinkwrap":false},"6.13.21":{"name":"ts-toolbelt","version":"6.13.21","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"39b95dff7371b7a324a3052f5c4e9355ff7e6c57","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.21","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-8M7MDW7A9Tg3XpsebBgVdgU01z88tMUzvxLcmf369of3wUyfinQ9cbJpRsbmDGGAak4ssNgXaHXGUaGfD8BpGg==","shasum":"8213a2c5b886d1c087fa5ecfbe8487121e1f2748","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.21.tgz","fileCount":6,"unpackedSize":441742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF3dyCRA9TVsSAnZWagAAYVoP/03d8lUywO8tuemoTfjU\nimCFUj7ujBhODXPvQ7pEUf66SbJbA/nkAS/9w6S5xW81f1XWHbYS2OS/Nhwf\npb8h8xDtABlRaD2EsUZdWvFJ+4/eZz3TVQ6y4kIvRbrnj7DuzEG2hKfz+KSC\n/gGsfqk6cMCby1peUEXZ7i/Yi7oHgdmc/KuvrxbEtheRO7MeCu6yLND1dnFZ\n1i/8F3P0N8mqsM8eTG2v5RjFt/BbAuYGkQq0mYhkHEr4Xpfq7qcZ74NX+Jpi\nE22sfa85mWo8VSO+rEsi48/SxZiib556HBJvBBtpOhjN62e9NESSJSwfesUQ\nRfZQ1aVwQFga1yjHRezffQYAdjIANSPT9IDy+GILDjMxEPrpY3G6+a/j7ZQj\nicg3apF4fFkf0K7004mY38xTa5yu9d57YWkAMo4VcRV82b9bnfO7F8PO5Kjo\n8WaN5nQ5Ot7B0oJVFgwCIO/KEsU6bRzLoAnNZ3dfsCx7SjLlxvYmM/IrUDhH\nGKRI+pKZrx7kZFJaki2jvk76tTrJfQeKM01AIdXakCzUjBrHFwquwpCf/ZGI\nbPcXVtokXPa77Av7j2H9Z4QlZAUQVc6pEtR4BBrLKDj0r5Qv19focsLvk7TG\n0oJFKIQHIrd6xNTG8qj/kq8NIqqrcrBtZYD4xi1pFH1+cQbSzNFTAf9r0x4r\nLMNQ\r\n=mcUe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDADvn/twv2CgIXYBIHhdugSfE6E+zkOGTMxoFqhQH38QIgEwi8m9QsvE2yZ6xAf4eyUHRHZuZiWgeXU0dHk1QOmW0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.21_1595373426247_0.07404508343945726"},"_hasShrinkwrap":false},"6.13.23-test.1595538244428":{"name":"ts-toolbelt","version":"6.13.23-test.1595538244428","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"eb967a273de2e175ecb0e15af11675c654899290","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.23-test.1595538244428","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tbPXp1icBxqUshS+98SzXYrvbMlQLWsMCEbCIHNowLq5/3+3Q11YjqQJxIpeNlp/nG3HWvXGTxF9pdkBgZeLag==","shasum":"30a7368b990f80853cd7ac54bac0f6f79d1853a4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.23-test.1595538244428.tgz","fileCount":6,"unpackedSize":440574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGftSCRA9TVsSAnZWagAAIxoP/j2Iv8/QPkJYY1RyRIi+\nNUBrL2QaTZav0ZapQJqVGv2TCFbZcQl0XDaUlvP4SlkUyE72KvIKEvWzoo5F\nEXsX6jPRfzi9UYuHEFZ4EccWu7r+lIkQijiY1aLao465D4NP5Hf0hfonxZyZ\nnp1MPw6mnUZOmp/b+m4UDyHSA4pmqDinEN06a4HbcbGP/VzJHLVh4OPiYSJw\n1hAh8IpqnaG9Hjktg5QyP9WDwTb9b4nlI3ADjQB7JdDRZBwv/pIseAaSG2am\nWeKTeHarRbMwmdTysEBnpr3m1HjiRsnFxPc2k3sZuXdzlYMTATz05E9N8LEA\nBALXFg6SunveGjnGkpzyoR+DALJ4N998+wp6Z504LciP6Trmwl9TgHr5NiKO\nbaSX6a2YXFzYpvqDQAoyjewBqLMyNWlJz6QD5Toxjyze4adoTITNnQv0Jcsy\nF5W2GFIdkJoCPpG1ht/G/H8fx9YwYthrdfkwhqcTaPOv8Y1Ufo7nQPEPNQaI\nHWWdMw6Vagpi9+s1y0zUpa2I8N/kGxCBg0uJMkCI+Z28pVrgdGeSEImY9KIn\n5iDO/miw/m4zcs7gYO4uV/q9dsM/Kekd/QgmstXYSedkNu8UJGnXEIE/CK1z\nlwt6XvAeiVZo4IZW099OGYEH2MjohdLlFD2GUhSpVuf8sfqIO/wyQpf4wPEJ\nUga3\r\n=XyTu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTZZ9Xer9Th9qy9PObYu4L01QFchH7Hnk1LyujjYRvHAIgRFUs5IR6aI/mwHV/ckqwA789Bb0vmPrj+0kOCkI3qNw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.23-test.1595538244428_1595538257644_0.7236288188822517"},"_hasShrinkwrap":false},"6.13.24-test.1595539145548":{"name":"ts-toolbelt","version":"6.13.24-test.1595539145548","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"efc3325548bc3f8d69fff9e8b3a5fa1d88eaf7f4","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.24-test.1595539145548","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-V8Nr7xMAhCN/AVhkGx8kgvCQonnFbpl4xb6SktGJKT9WRXkocBFDp0WqBa0N50jA+QIbOWphIyhopjxXwsULbQ==","shasum":"9e33bd35ec9462d810a3a980f89d80aeeca643f5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.24-test.1595539145548.tgz","fileCount":6,"unpackedSize":440821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGf7XCRA9TVsSAnZWagAA+TkP+gJ4NrYgGs/pHqEEZbeF\n2gjv/VbAXAOVw5jvsoygc7EHlonEmJSBn5bYaINTc0FEgyY+d+nVgp0BXvEG\njQpfcKN8djm7UJyM9SjpwzYhZq4gOXQOiOj8GUX0DN5ffDzqoeJsXWm3nqu5\nDH410/J70LHvscNL+Mx1JDYGAcOGkp6EBMMJBLoR6fudIrrR+hErvt+B4mvW\nzG3htFum8tw2pzTzsCY+SVcCTcptFlnHWgtUjLfwkN7Xy/kCT+blT9+Xj6DY\nLs9RCs9tD7mALT3k4pNmAgO16zc3pJBRopeOB4XombUX2WJ3VzRfhaHgmsQy\nMUXUtqkc3n87kbkiHysrtckK6PHpgamDJTKbmXjRNpOaumjoZdXpeHRW4irN\n6JybROaRx17/ySW3UQsHsyeafi0wJi1ICI5wTfAcX6aEbcYhfj+ZO4pbSHRh\n6jpqGoSfDVKzzE0Fi6J132NSBqpej7sGRHBF98XNqN7No0Z99B4BcKtRPiFQ\nkn8bFlxY4fWz+Jxmdb49D2XLNffgB6Pq13HyZWriCPd+kT15smpRVzxkz3We\nl4r42gv5S0abp/RRftn96N8X1vislu4zPkIb9V2FxHpgoNbQrxBSg4MLE619\n1jrFbFzsiDlowHjoESViB2tHiMH96F/fr9qk9udmJAJN58N/zqdwhIo+D4n5\nKHn6\r\n=TF+y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/runh2j2lj989pR/esRdsNDaPi2J9KLihoyPscUJvXQIhAKNE7PRyEz7LdURQ4EGUrw+MNPhR0E5ZcpTgJIjQlpqD"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.24-test.1595539145548_1595539158991_0.6980258385141753"},"_hasShrinkwrap":false},"6.13.24":{"name":"ts-toolbelt","version":"6.13.24","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"efc3325548bc3f8d69fff9e8b3a5fa1d88eaf7f4","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.24","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-PAFJMx6ghnqRC+ZOt2AujtDJjiCOGxOgPlY0C55isq4KacJ1jjZmdz7ci9mLTgEb9NKBnHv+qKMhD+cROk6oPA==","shasum":"9bd09e6f521c1bc2fce7b42a40285ba23d8ddd9e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.24.tgz","fileCount":6,"unpackedSize":440802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGf+sCRA9TVsSAnZWagAAcT0P/jP0doxr+KWbd2jPSFB3\nqYjzcrwozxBb2QOKoo20fUOABUgPVu0btNm/Pepb8wbe9gZKJRF2/Mxr7EQ4\nynYOuIt2O1e34jXs54Siy93JJ2Fy8H2gEfcRPc26qhxumr8oWW2/vs1bCP3b\nsywb2ikRRbLJ2q1phyfXYP1YKaPpuzZBatGbsi4v2Q19IZEJ/kxfkDxLdEf7\nuqnCsOm05eL+v7XS2Wwu4oCaRWyL/xhxozQSlefFR8O4I402FkxE3itTJCqd\njzwPhdQN4wAPxxQlVCxyhi+FL5a05uL3flXtkcNBstffNZSqHVl9YPT0ZwVi\nuKZ8Nus+G8KakEhqDcgcLPbAkVn75q7EdlLXYrP1FVo5qJEXQdy5/r4o5Qlv\nbQ1rhDAIR2ui2deNfARlVf2nMbLZhM4exaM+/Z+71YYgyTEF5uIVpB0Q6/Gm\nbaX6Z25w/UxiHgngrfaNgO8SuddvVu8rSCR0+0cDkR1GpcTvBahsEvK7EqQ+\nQICu7jp6X3w9nd5M2IbL/2z7lUvpX9mRPCO4xz2IbU/Mim4LZgn6SrQV5wTX\nV9qBwE6WirYdZIC4otdOYhzttD/KJjhaMzU7GALWLVsKJSv4FLje2iwm+qLI\nTCw3dQ8VF/mWh+EyWqL+Z/Tk9p6x/aHW4yNxmOLYXQtKhAU/84IH2qGnQdDD\nyh8o\r\n=6S8d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7eyeUsLiXnxrVTOBQeEubJihshrGlez4Ig6oakuM/tAiEA6QGjqV7HvRgOA6hHeMiOTyIf2GbegsCleJXvPMXumDI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.24_1595539371585_0.32318654961459337"},"_hasShrinkwrap":false},"6.13.25-test.1595590191540":{"name":"ts-toolbelt","version":"6.13.25-test.1595590191540","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"b9d138e6d2e49dcc1a97c47ca59623333eb4feda","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.25-test.1595590191540","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-88TpWewzb3Hb6IdY051d8qVSAvfateBDiLDSRB3NH4t4CfZjb+vICJvDac5+woDT7317o9SAJPJZWXeFEnyZ/w==","shasum":"b770b8ea6838987808109a011f9e7533ec075916","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.25-test.1595590191540.tgz","fileCount":6,"unpackedSize":440953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGsY9CRA9TVsSAnZWagAAcqgP/0vXtw01ceZ+Xg4TP+a/\njEzEN9Krjne4fCvi0dxTxVBU/4GsERUqjmWKeFgsdcMgwyAGDlnqUipryC6N\nI61Ffe+/U4SBg4vKe80I66aj/5fBL3Qu0LKM2rp/18C5jJm60im/xKolcqmI\ngiylLG2O6xXJpWV5QLECiyX2GV+DZipjHNzq+B2Lth+ACUtwww+mSPtNc9Uu\nazyoQyHKFPDcSQN6ksHEqFSc1VnYL03zLXbx+RwG40ieVlTuRkLK1ymxJCs1\nbc84qzRjvks3/lDkpz3NuDe2w30ca29TFrEDLcRNcUfDBMWZEbHUaR6y8JGo\n8IPAFJ8q6yLwjC9W5id4zSe3rimmQj+9qQdRJ4+zTV066dIhcooH8SffPQqq\negw/vc46XzTndxW/N8AFDapIU4B+X8GC87aM3CXEjsU3XOrTENm7fTME5VDe\nUxBNFVPnKjvH12thXNXmRwQFV02BTuZlfDeQSoUc+3YVCAk8WS02fzb+XJQc\nMumtlNcKSMgflc4zU/bOx1rbUXNx9LwUvL0eO9TyBtnu15PZgd4rJm2Yuy0F\nWbpRDWPlx3e3pQbnMzHPid2a/Q/+t+542qgpmAi8X8xd3b/JGHuIDSM2OTRb\nDNPfd4YUNffszm16rj4cP6o6LZPwwzPQNh3iczMj0YCIvEMk0jl6MsHVb/pp\ncJga\r\n=MgKl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEzOGTOfS+6vlNBpgkoiMjxiWB2Av/aiIFBtiTE2eNfAIgZPBusjZknTxfX4/OcCdOlqL2gn4nQjSWQO7PLvfErz4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.25-test.1595590191540_1595590205077_0.9438844210781829"},"_hasShrinkwrap":false},"6.13.26-test.1595591045487":{"name":"ts-toolbelt","version":"6.13.26-test.1595591045487","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"latest"},"gitHead":"7f30483973ed32f461152eed2b7b20af435bb1b7","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.26-test.1595591045487","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hhE+aHxa5LOITEuYVB/nVQSobZyTryUsgdSCCDakAvKF4H7xpgNTNVatF0cmkUCG1ECHKMhvcW3Jcw2vgXHMLQ==","shasum":"484da7b4728b93c77d5a1ffb03b2b793a1469faf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.26-test.1595591045487.tgz","fileCount":6,"unpackedSize":440907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGsmVCRA9TVsSAnZWagAAbAsP/RptWT3Q6dcCR8gQAfFk\nnlUzUd9dZYIlPB21rARYPY/8GWKIvjpy3RFPAsmIPTw0P0W/GvqUJeDjG6eq\nRFES4f6xA0YBFK2CM8i3eywHwnaG0uHcf4JKBYPZXKbwSGB28JmvakOFLtrW\n460PNf445XmA8x0LdIJQKI/GWJBUiYrkSD7YypjH+NYp8ge+h3wXJRXaHtQh\n5iComB1xw9G7aJQxYrm7BwFGQWkLt6XzbnwaO2asSTwaY/dmYecYDFKhQx9u\nIa75yW2dM12JhO4hahJJtPWbGcIhKHl/+ve61pUZmZkPIxo4CRI64DwqRk9z\nX6d1OLTnNwmyTZwyUid7/eRr29hiMbGO9uU3E2wdUNBd9RAxrbf3tQUVJSSv\n3sahwHyKo7xGd9ga6+Hp8MPsy0/9+Fs488bXyvM41+Z3Zw2nbnoiB5nCv2jK\nlu6NXWom/w6EzrbnJBNR72MSIDSTg8xKvPgdlMlcDawfoHR1el16hyUKVPCs\nZryDRIGu6r1UYKayGa61axKM3T229V/N8FMjB/SDtmSccXnNKzDrSs9VRcUC\nx2ZClrm4uzSTDCY+Cr1DIpf6bRe7I32hHQ3jxke/KP+Rb/tFe0gU4H09Nmor\nYW7mQS2bIIE2pz67uJq8BxUz0YIT9fReOC9lpqkM2h95W5Xk2GZaX97g/NFi\n0xdN\r\n=rnNq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvjInkK5GLcZW4SYvm+yiIEERoY0bYdkqXSCa1uuNntwIgD+odU2iyIUhXN0+ulUg9ZZvPrSJGo0NaOS47sGJCMvI="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.26-test.1595591045487_1595591060306_0.941450327015152"},"_hasShrinkwrap":false},"6.13.27-test.1595602929680":{"name":"ts-toolbelt","version":"6.13.27-test.1595602929680","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"c666786a9e07995578b5bbb5360972751c3546d2","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.27-test.1595602929680","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SCLJo1gY7rPLu1at+EZLLkLNvNvzNZyjkT4RKo4YSjdQ1qoPErqvrxpleowU1VR1QR9Zp2xUfWrwgi4L/yti/g==","shasum":"bd824ba0d297cb65b1268768e2723e8ccd2d4f8d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.27-test.1595602929680.tgz","fileCount":6,"unpackedSize":440879,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGvf/CRA9TVsSAnZWagAAEhMP/3xYmmI6JXwLMwDgzSwj\n6n3jbahVvnHT1pWzUhXmhP21ThLpT7/LCpts45OKFTVuq+yGdHCnno03Pt7Y\nodZM0YAdyrmZ6i/yyBD1+3SvVp0g9qVbVnxr4NeY0WPgG7aK9IMHm6Iy4FC2\nLEoj5XSA0oVW3urQT1B6FsAthdgk55ttV9l3tHzN2URjHSchJYgHlnDm85sl\nyJjVTvJ5ZHvcB0/B0AbKEzVH02RHLiDJIRmRNTk94/Ga0EJpyGqeWNYjtmTW\nQu/A7aGLHmn1ay/vhdEGUufJ6tid8QiXZatZNBS9GZE3Vx9o1tbxxOjTvDWm\nKQZ9wGvwkKsnXuuYj1Bx4AJoze/yrtsfeA5ApP9SNLTpALJXxSCP8H07z0PU\nCkbX8cONrChWF/ftfC4pbZR/pGvBBGDypJvsi2UHb3l4zfvpsFX+ok/V4g2c\nzYgqTgTAkCoOCAZGWr4bs1N9phIrYyZg5LTPzoHK1y0Ps9ZqZmE5VRKMZzDR\n36dUlp2L1aL2AaKriVelx+u6fBXaR2iEe0CwQkLkAIYWEJOtCGI0eSg9pqgU\n6/xjqW31kysv9O3kQm0wu5S3N3vMkvmNs6Fis15uTLHqlG5lC331rpMGk+5Y\nMuL7ooCPbeF4b6+brAcSgw9z/A9bHVJfP3bFqFW35j4eK4/Kb2CDC0Gb6buP\nokTu\r\n=Dsb1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDfo/ZiZXSipBZEZ1k/3qLzvI2PkIO+mf5A7u1bv92q3AiEApnDodyas5m5DRz8noKAgA/cOyEZvhUOXVUybJ1ZurRQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.27-test.1595602929680_1595602943413_0.3916845995930809"},"_hasShrinkwrap":false},"6.13.27":{"name":"ts-toolbelt","version":"6.13.27","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"c666786a9e07995578b5bbb5360972751c3546d2","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.27","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+TTKFlLKJRuYTxYt0l/zqUT+eNbavYTjml/hbaN+PBagG4vNnqs8L3YyRaabpxEHGu3H8GbHV98xsB+rOGNsPw==","shasum":"d07a2e013608b278f73405675df6b2576f8312c5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.27.tgz","fileCount":6,"unpackedSize":440860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGvhZCRA9TVsSAnZWagAAYkAQAJZCnCsUx6DVe6sddkM0\nd6DmF3EOJ825EB2nbuvC6psHM9JRZMgBifNPi/5Op43jODNWg7J5jkCb7kg1\nW94oiC/rf7AUHgjXfDdbNx3fdcKH4bbS+kh0Ia5pb8CeicH5tEd/NL3Fei7N\noDFm0jFq5u/C0u6OK7bHk0HJ3IhaY3AJkVTf4pfK0ELxglgMD4T8Eobyc1nW\nf6303Ai/zHdibYPjsk4g1BcHDMq3q0fGaiYd2l3251G0cXfLe2bIxnWUNnNW\nQ46d6WcIqLMrJUfvT/cYCSrLrYc7pB/CWTDxrtOckvHUVm0i+Cmj2K6bx/ZE\nkvzPAJhJnZd28hFXy2aGLVw3Qnuma+YLHSbTKV+d2oelatpApGfmHzL/SXNt\n1QucbOKbf9ppcDbBqTFPCr5xqiw1m7S+Xj/PPZKSjPvFkSgPNrWkhXGihm3r\nCLO0Yrby5A+e1d8GqCykIEQFRqIclpnsvQ0hW8yyaMY9zGrLbrQV+HFOvVN3\nzZ0LNQWGyL9ho60/16UtbPHJJRiqqBffA/oimwMZr1O68BX686Ftvaf30xDp\noslDuTonlVHTZwG1Btm+toKVAVZ6DVTdW9SDYQMdMW03YZaUOm6T+7vIWB7Q\nv+vsWTZg34L5S2mVEzk0NJxiF27qtclEWIfhJaeZBQC7RLc50TJx5jPicijX\nxWd+\r\n=gviR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGlnVDsOqiHZDDSdKVdyiLxdQlSLGQMNP2KibRKngqANAiBg6PV8VxOf2dN20wyNp1h70lY4PrqVs+oVDdxmae0JAQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.27_1595603033348_0.8254411298417041"},"_hasShrinkwrap":false},"6.13.28-test.1595611281976":{"name":"ts-toolbelt","version":"6.13.28-test.1595611281976","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"94b2b6d8ccbbc0754c9ce9ba32ce6540a3971d3e","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.28-test.1595611281976","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-t9bgiN/4Q7YuStD36PBjrGHIKhbp10oxAkX37KhjnyJkbDcHPKaoaJGUyfTfs8stIXi25w8lihiGy/jFgLOcOA==","shasum":"f96391d57246cbe142781496651ae3e2ef4a5e34","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.28-test.1595611281976.tgz","fileCount":6,"unpackedSize":440996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGxihCRA9TVsSAnZWagAAhzoQAKSA+yKjywyRf8ypS+hd\nJWqv4kFXl1qa3djUp7rTOTcyr+HT0t9QmGdm1blP340JJnIbNfYu8FDJzKo7\nuLRS+VKbf/GGzPOJeCid4EES6iAl6qU35pUSdNLmn0tsftLWouz0DicLolp0\nF6maS3GFkqrpTDWH3auwRFGzuRsPebKzcHxJnBPvCmH/GzMziQ2otfV4zLHI\nOtIOr7vMIHEmiuo8FHbDnNtsnyK5yDExK5F6irvFrHgFryrdouvU2ER65oqj\ntzMCMoFF1P4pp3LhhVdwUuRNwqeuMrdNCgQOjrgk0rMYc/P6vMzTBdpRETz8\n2ll1wEhxOV4YqiF6KwisCL/pN1QmQCn74pO+hWPkkPi1zdpKGJ0+tQpWa+kw\nVAGaAnkq37WDubwtqo6qipNLid3cmXo46jdJIfg92Bxy1wIq/DhbBeNLRHJy\nLg4cjOC8GCYnzXQdxcMObekftCQSP3Yznwgm7T2R+kgUMaHj5KyVinJh9TqM\nPppZomhqe1RliLuPgCGeM2EFVZBWnqS57Nh4zu/1DuRkKqg3aLFf57oLc2sp\nBcrWW4DpeInsxw5WXbzXwyFE2LL4Bkgv9iK94qjoiVVaBpcUmvJWxbrlRiFo\nH24WT7rY6UrHwtpHAylqj6T79YBhWxA7KFp+Nw02BMlA4yeIIvgRzY9BppUT\nJwdV\r\n=sXwT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBFR7Fe39F9VRpY43X0f9JsKIq0m2gt9Wq3urHFyztBcAiBMhAhQUPwr0h/p8yHSKGg7kEfqlcZidwX/c3/u3jwffw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.28-test.1595611281976_1595611296619_0.12345165023840399"},"_hasShrinkwrap":false},"6.13.28":{"name":"ts-toolbelt","version":"6.13.28","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"94b2b6d8ccbbc0754c9ce9ba32ce6540a3971d3e","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.28","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-89amEuUFvgcErtKh0+8egz8I+DertVSSGYaFAtNK56H7DXx4czFDL+wApauD4xSq4NZrB12kM++ZYu9e/1l3lA==","shasum":"7afbdd5b95ccb947085aec400fe59545d02de448","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.28.tgz","fileCount":6,"unpackedSize":440977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGxj1CRA9TVsSAnZWagAARS4P/iH6a5mtFEENCMIrgoRz\nKTYgfDeFPQuti/boSvRwG/yMW/wNyNjE7Aoy6MrR/Js98vDAP7PHgzZO9poT\n8CwAIa/tAqUcq6BO/uMfe+3wvUKnfI8NbUCMq214QPUAyt6SL150CfRS7X5Q\nOapOjb/+3wWRgVtbCnoQFvlZiaWkSOIkNEhq8hj/wuSWQNP/tjoR3RHyCeAK\n1eju5WVBIJWrGg16R34XRi+X66tHvC+s1tGcJPOrwZ4b/59jaKTRim9zx+dy\n5dpC9YtMMJvbqVFOMNCG9QAbk1Qn+UsI9lqa7Ih9vuJCUd0XgSfykLz3uvML\nS/GaQtpBHKewIhycTbR140qkXODw9CTaU0rmgWtjBvUHl+bwQZv13Y+bsnaA\nzyD6jrZvpJ4BwWNbx+xMQl21faY0CvtnZv6QsFNq/RSew8IanQ6geVKHnIA6\nF/mvxvbEI7GJf6hTt6DnitsWdz0hrxtTE59TS36VH2RS9FusuZxQlFjeSbDe\n4Ow2Y5kZf0yvdfllcAY8G/G9vVGf/GAl/wPKSA74dfciD+zdPTwIpmtkvXQW\n6mSFpj0THSc3TNlgjqiMKHEuAx103YLY1CjF0e0ZnlYK6qCNa0Ulk2YeyRXJ\nNjNAPzD8GfY2/szpD41IR+xVf66eGC5UpO9FpqdME42buHKfrXwd4lOPWmnV\n7qud\r\n=zguR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOeuaLt1wJDeHHT7kB8IGJOPcPYM1j/1ryayUuZH+59wIgQUZ942bvW5nxyxDkmJbJWfcWo8q2a2ZgrK8JAtHQvvY="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.28_1595611380382_0.25867302399137926"},"_hasShrinkwrap":false},"6.13.29-test.1595783480057":{"name":"ts-toolbelt","version":"6.13.29-test.1595783480057","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"86377bfc464bdeec4a9ee88c5ee208990408417c","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.29-test.1595783480057","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tZaXqWdTZj3jmgWGHBVS/hReRNlOebJjK08VuZQuypUKOlLJpnJIFRnu5OWskN7AZ5oTt9rUaooKItLX6JKyxw==","shasum":"c84fba3d2c23dd9f050d4abb623f9a40b5c463bf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.29-test.1595783480057.tgz","fileCount":6,"unpackedSize":440456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHblGCRA9TVsSAnZWagAALvMP+QDvfaN8KgzlmkKeOw4n\nry9aIVK4e/GTpY96eZiFRoLr4XZImgqxBTuIjVkf2vSA9R5Z9sopoTv+8Nsj\nbvrYOK8by7rRrdXOYWD9slzbLYPAQfhAn1U+hIEJMNE0Q9wyg4GN43c1+C8M\nrFe7hb9blHAUj7wXuSlWwwuiSaycNnSTI97xTnuoszwPOuEDEARkXWvbzvE3\n3J6czgfPWxtI0qp2d2s//bGmB24EQg3pX+g3melAmpNA+2kMzO5vy62mx5GZ\nm5fuOgzp3x9UF23fyF+WvzdAkJUVY+mEbRvNLTR4e8FNUFRDhuvEwKWb2ltj\nHRlQltMDSGX4tFOnZAE6JGwYd88L9FFZbIzOtPK2H73zNgC4/mTHnLnn6n2B\np03cfNmCyO5KBCUDOg/0YHKFrJPFnxCdVnHtjzVW+FvMt9CyCHxm64pTuy2W\ntO7b7d2xpgA58uedxjyJJ9z9KvkUvYBxBi2klYFEIN8S9pxAKFxRs22I3w5r\nwKmbqORYtdnwn8E6JCT4oT8K09oq9Etj57Aoy12OOUsgmmWbAojQ+ouASaBy\nGH7/gaNTv4n/HuaHADgMxxbhUiivT4l8qKFYroF6nNQ75zG9oxBn3T5d+woH\nd0LGA34db0HKSKhCc8URKg/+xTuvr6SSAIeqk5ES6B9OVvdkdSshpx0fIxPI\nmBMJ\r\n=Wefq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD71FYhzUluQ9vQs3kA1kdnFANE7y3cYIKNzKnVXCOR9wIhAJyTDTaCTI4tWtdy3B4o3av9eEEI0wYHrgfOwT6BqQZ3"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.29-test.1595783480057_1595783493829_0.9293769234810283"},"_hasShrinkwrap":false},"6.13.29":{"name":"ts-toolbelt","version":"6.13.29","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"86377bfc464bdeec4a9ee88c5ee208990408417c","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.29","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-7knwv255EQKe2v2z4JBwG4A7da7PeTj1fsiEAuAz4hs8tRd5N0ZIGz1Gi8O8eYQoOvN08UFBMAdNFs8Ie2dOGQ==","shasum":"490a6fd80934f4fccbe7e38f55a071cefc5652e3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.29.tgz","fileCount":6,"unpackedSize":440437,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHbmWCRA9TVsSAnZWagAASWQP/RiF0BNdBMRZdOrKvUoB\n+K+1nnPC678dJY6wg78AvD7IsFWrxRlZ5sZ+031cY6WHaJKgPcYcD0yFvobX\nfnIV42/Mk4d63WME1NmZV8NRLI09DBVEPqQe6pYF05MW+m5bcC/zjyZFhJfT\nrS4BhrI93iCB5DK5zjl1kJTd/p0RKTF/YtlxTJV8Es6MlNmeq6VAG94iN1QN\ntKihtz0Ccv1bg2j+AL6x675UEomNOor1AJxc15fxtWbD1dWJrTMxLCwshoGI\ntiiUHZzvaELKzZ6qMJ6A6bpmUed08i03rdFNBVYDLM1GB5iNFyJBugYQhz6E\nrCUMR6qqISGoZHaNxak1sYRKXwa4X9/0D/3PCpk+zWQNzBuz+1jNxvhciyQ+\nOn8fauUDGcV++ZcfF2SB8CQw+Ma3/E5n6p10Uv0u7t4wOhfHhsrN4Gw3FNFJ\nBT+Wg1WPb3vx00QSy/zEbcI4wvGliHXvEChw6HKAVSDopaMkz2TxyUFgZaw6\nidPUzVTf17f1dNsriAPoApTMSH6I1jydvdrfo8LQ5PfQiOjlQHoQHImCk9kr\numSWkRx45EUwDH15AgKmBpl74q7kTORzbWpDQA7clyKQbAIi9rbpsGUW5nUM\nwSMkw0oBvXihtkc+GW+ljAU+dcPUYpgWaK1USmun4lur41+d+nsUKe9cEjJf\nAH/4\r\n=bqEc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpRwPXtzCit80mSRpZJ1rw0XNMECiDMFVEExPZZuZn2AIhAJUWitgVVrhobEdchOAlgQ3uUotfsV1s8sFxS8rTgfuL"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.29_1595783574166_0.35510378362813655"},"_hasShrinkwrap":false},"6.13.30-test.1595784120558":{"name":"ts-toolbelt","version":"6.13.30-test.1595784120558","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"3e51d09594e5beccd6a9d7197ca8f6f4d39d84ee","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.30-test.1595784120558","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-aIH20BB38Xf7q5mlN9OOCYNF4lX1dNEPL83MDb0HUeWENMEcuuJ4cIKlngHIVCIgWtgjWtF2FnQXfdDAMKJUDQ==","shasum":"9887ab537795811d9ba8985a1bb035ed62f56b0e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.30-test.1595784120558.tgz","fileCount":6,"unpackedSize":440456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHbvGCRA9TVsSAnZWagAA45sP/jhzXsx3I+8DWNL6kPKe\nBmvt5orsvhYBUbUN60dU3iVyxmoib3n+DYyvuZVAKd92KqB3ix0wqxpb1vrA\nnc2LrJwtzL8yln00OGP8NfszyEDd7QTTQI3mHTk7uxLt+XVzjhcXb8stBU03\nWDmRaLgT7YIIt7vR1pmw9cXOzNNmDzWMO7ovVAyHHVfQDaouOd1uvWN75EKo\ndZYK/i2M3of3rd24NJI+xxyPOnrlwPrzKiuc1LkIo4xDUZSeJCrFCTNn9b3m\najO1NpBhNKW8fyNC3xwMLOplDGCfipC/u/jYMDO649B4uBqtCcXpRaR2Sdeh\n4D0EBWt+8jbNEDthC8kSthS/uOP6MjceuJ8kSheBy12qaFdaVIEue1byj9wL\nEX9zqAhuHKf04jLxGpKId46lRC6MVWuIKqDZq24aoDXBv2Cm8BzZFSLM9C1n\n6gCkNXj6vBElzJUxkg2VtFasijuYSfv5zHZxOgFuxMxxnZRQFMe4iPlEUCPI\nIlqclM6WeSzmrz5d6qysRy+XJg+C1a/Fyr8IZWhXyRmQevLsooFbnp4bkobb\nfY3nNfh4Jnb2KqF2xjM4OGFHcyXiMvMPxu029oFBH6WLmAzdv2pGPVx0z7Mx\nKEVvkQ8J6DnNvka8aD8/pnXGZ7nWSE/0R5Dw+ZIAVJDIGcAi6IPDzXHwSuKa\nExPL\r\n=CggP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHJxp3G/l3IUo0cQEoAh4fBim+uA0QRQwwX92yZV1wTrAiAD2OA9DnYq/6EjPc3iCLCqWXkPhsDmnuxJ6cAOLfgDtw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.30-test.1595784120558_1595784133798_0.04155207534326677"},"_hasShrinkwrap":false},"6.13.31-test.1595785129829":{"name":"ts-toolbelt","version":"6.13.31-test.1595785129829","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"a3f284bb512b1dc915b374859ad80c3ed1ec8903","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.31-test.1595785129829","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IsGDNpM/u9/MIoJldyprIJIIAXZpU3Deg88A/JvHHobUyPN/KrpVcud0qHfLrCihP9yE43ArBHFJ88t0WJ3TGw==","shasum":"ffafe3f52c14303fb42916351cf12ebe3d748795","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.31-test.1595785129829.tgz","fileCount":6,"unpackedSize":451377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHb+3CRA9TVsSAnZWagAAPK8QAI5esQXXbuxwIDMETuWZ\ntfAgVC7uACJ7N35OX03kZf1sU3LvT1VUtOkTyHYAIdlK8uTx7+Y3OqEhiTxA\nb+lH8LJUOnUdCRyoQxRIVSXgscVBDA1oqKem54MkFxWW6/w6DuP01jXAGZOg\nzSGVyD1e5gp/+fLMQEo+sERlrA9T5HhEnfSaouNyicgp++y6cXpACRR5+QWT\nLg9BVk7o8rgXlvt8N9NkUaecbksKhcfIOONn8P6Kf5K9AIXoKCNcUi3Y0smV\nsL2VVbqklASr1hIb9CnrvG/VnODbqsDA2m2oPIBnw40LYNVns/7vkW3VxkED\niWxXHvPu3vImn+w5yNTU4q0LDFxz31Ixuy4X4XV1LeQh7yaGry4GbBTBxMGo\nhpCZlxe2eCON4rsmGZJQV8IVrDXTMzVCm7dIAyPBwfOcnmXNE4PsvbGMsJNP\nrBuIwvsY8bnJuvHuxHX80v9QHWslDBbUTGJrsrbXchmCWk482car7B/KOUf/\n7aWJC+Sz+IQ2fhkaxPugWbVQhpquGMd7ZbS/FIF01Yq/G3OLVvL9YlDIuAtp\n4MhsDFgHDiso5YbH85d+gfg7J1KE7dZpIvI71OaLZNL3hSbqEAmRpTCEOnMp\n2tFgtRzsIQ3+FogR7ttYSAx4u2G4llI9AwW9Auk+W5dkPoLdfGRo/u7mt5kg\nfcgQ\r\n=GO+R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0xr+irlEt5zCvUCir1a9bgiHl14I9WjMdDil5pvMCvwIhAMCwpF3N714apZsaaW+2t0or543BeANrO4BblIMWVtTe"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.31-test.1595785129829_1595785143223_0.1924681887748687"},"_hasShrinkwrap":false},"6.13.32-test.1595785242800":{"name":"ts-toolbelt","version":"6.13.32-test.1595785242800","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"fb05cbeca0754131082b56b5a59d753b23a88f4b","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.32-test.1595785242800","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4gveLNqU8DD9pCLjXP6h36v1EJWfVLt50J3k+gd4TsOXjl00qvXWEB/t6q0pJ2x6ZmP+ovAHwzgzFOdHzwRTgw==","shasum":"b8c388a317d363d21aa92b4414dd763841f032e0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.32-test.1595785242800.tgz","fileCount":6,"unpackedSize":451629,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHcApCRA9TVsSAnZWagAAzbsP/RR2BEwVhk2icA0r2WDz\nohiEanQYh7WkI9tAaZFVF3Wh9D2BzYadVf22/Dfz43LT/FuTtdSlRzakECSP\nf2312+0Cc8Upjz+bQG2o6RK+CdHXDqn/pXqClRezO7ofdbdQ65/XFSIMa25k\nEDSXkK/KXsgCwZH1PXEJuIs99K39nbHGqF29WuTBy0N3VGeb7zlP/rXkvilq\n3F2Bq2LHELDvyNGyiXsl4f1YxmiCEGRdHl4M69Q2DMHbTeOIne2ZoFq3qqNg\n7cJsj5ShxBGRc0SN/XvkoLsbpN0akZnRFFy0WAZW3zxwIQ1biUDI0n1kxHrN\nuFDofBHLqyizXEq7YyBg3BT26QGbdVYeJFVaQoOaXtv+EDVDpo3LlEsn2Uf0\nmS0f6fWpoS90EAVmgysYz5QNlKg6j/W6J1q833f15Em/sfpFBNybfu8atkbm\nBAj9Zy5qBaouxCHwQFTYV6rGd9x/2VI4Nzaf6u8Mk8D20U5YG6rZY4gYRubV\nFJOhWme2h2OXph7y9PwLdfv+7MfPfmbIdC/gRKS2xLbSIIQY3iMf08gjmSx4\n7Jtri6fT6eQRow/D6KnVUKrC5YUCcBbgm+hE7Tdv+ubnibCa4YKD5YDP7nUP\ndW9ECGYquOOwMcI8Hv1VWRp7wXjIKhRlFsDQnEXkHcBBJcpOX29j1IG5TTVe\n2D0h\r\n=vCsK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICuqnsQTCazZ3qDEcT2PfwhJzbk+n51WCfIhz4p9zLrUAiAb4+dTgDtHsHIA7tNneD2q1amj3w8ZnjZyWmEy/QQojQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.32-test.1595785242800_1595785256677_0.7341218424257692"},"_hasShrinkwrap":false},"6.13.31":{"name":"ts-toolbelt","version":"6.13.31","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"a3f284bb512b1dc915b374859ad80c3ed1ec8903","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.31","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+/iezH7rT7jH8FmYwEkjBJQ8qEyZsUkhUJa/3z/stgQ0xzHYnrZ9aZmugvo5iONel99g8XaY0mOGBaHLNOSb2Q==","shasum":"06809b067f1584e145f594bae01c47061914c0ab","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.31.tgz","fileCount":6,"unpackedSize":451358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHcCFCRA9TVsSAnZWagAAviMP/2RMPJpTfBCh4Ec8Mgiw\nUoVWZyxCoB31qbKvq8HWyKF6nUU7WGQT7YXpNb+C5rSpSuUhawP2VqKVTohp\nKG8wL7+2oITT33JBH1cHV3hMOAYRmf9gDvWAVKeUba3GqoEeYv+aEo/7sIPQ\n9H/x7kdMVXXZN9TxYR4sst0ciKGNLup2ZR9Y1gwQgCrxHFbfAHi5w2SjDK95\nIQZsdd72E7nu6OpGjhjpQeL1RdCRd8KQjrthJ3qrnNgDdl5tp8uCgm5ZJjhL\n0ZUcoHI+DyaZcSURLHbRFOB/d4Pc0Yr8KRMWmebCmlYA7XIwR3URW7B8fAQH\nmZaI0IiiNyUgjdzizaoWvZ1o6hptCJtd/bmcM8YwDnfZR3E7hIT9+KBif52A\nvOosdEqumnlK9tukfu0xERtlpJMQMeCBgPr0owsJfRqVSTuw3LEL9baMiOYr\nLEJlGn7XtVy+EyG/XVjlYFetAaZpGF1NzGOJpzPx9j1JsLLlVmf307oi5Lt0\nh6JhJKlShRqEfAGQZMQWoSrnSaiy/a+X1KmlaNpkstZ4TIumMBp2uQmiLZCH\nP5luuKy7oF2MVrGH4PuAbwXcAU2tFQARkxIPVA1icskRUL8dA8bhwA9qOIDX\n3is8fVoid5z6bpUxO4YKfKTtLk5GFAKVVU2+TyDYgjiiwQX0jQhAy6hf36ws\nAcIu\r\n=R/Jz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjiT7OKnamyg4Id1U4kUwhAUxR0w/2utMPtnYixtIuxAiEAxDfa25qfnBuZL4unaeoerj8JdB4RP6X7A9b9C19TT2I="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.31_1595785349479_0.7304730585600847"},"_hasShrinkwrap":false},"6.13.32":{"name":"ts-toolbelt","version":"6.13.32","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"fb05cbeca0754131082b56b5a59d753b23a88f4b","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.32","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Fs8IuOySDkWXJsANvIkmV+dkbxH3uRJiR9E7qE7DM+j7/gEwemnzK1wUCJ84wSgUb/v6jkKrjiLQ9zlaScmyrg==","shasum":"c362fa758e46c13c03ecfcb70f2faa7b89bb3639","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.32.tgz","fileCount":6,"unpackedSize":451610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHcD6CRA9TVsSAnZWagAAIG4P/10/jQ42rKFPlVMWCZnz\ndbZ5AgOvdTQrcf2iZXniFKlfDCn8BxiBr9GArB1Ps3yBgELU2Y5K3Gr24ZkV\nYSA2KndUOjaD+DvmjwdMW+6OS1H+lE+WDKpj8mltqtcrXYBT+j99dYEEB2/K\njf+w8X0UPFkoNtepF4dGEpRgkdtz7yDR/+vnPgrEwlnwqxQA59CkiKmyKUvQ\nnP5xHFs+yEFzvoOnOE+VxJYwzUDMs2ITVsyz3pzs9papNQK+l0M2Gf3EZjQI\n0x8/nkY3QqWnGL4781ARQFnMD7CJxGI+ak3DSY3FYmtXEe/ndyd1ESwtvo7T\n8iEZiwJmJOHM37IWVMGvAqVUI2iGcwLQcl4Gx39/BcAT0NjZDT13StGPfKJN\ncijNd+oHmo4sGBlorP8t19nXjHn20VlKr3fR8sbHJyFhpN+8aNL6xhhMDl3e\ncyZ5bollj1AkM4xwVg3wnToqbedGKHZkI2+ZEfVkKX1naxWdaGT0Do1q4EuV\nAV6y26oe0CZT3iI/nUGnF4UBME1dXZ5WJjGwnll0rqplBxX+mG9ViV35xAZD\ng3jt5nyprmyM6MSq4bh7h0q2XEB7nfC/FBbZqcs05KVGRbIaKWkLL+1cdew/\n/dq6NaDzD6tP95A86DyNM1gHQThfei7Cal/2z2CX1VxN5cKabui83LCOmn7J\nNFgL\r\n=s95w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGrvct7DN7/bPln9N05OR9jXVt9lEYSB2bgTt98JTvPgIhAOggHnwaDPGjei5iu/2OLBRk48ZDrgFIZmyKAVOuwS9g"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.32_1595785466438_0.22240164658926287"},"_hasShrinkwrap":false},"6.13.32-test.1595792808059":{"name":"ts-toolbelt","version":"6.13.32-test.1595792808059","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"4a33041c433342e103bc6d0192f03f738a0f1ae3","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.32-test.1595792808059","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IcSIdr7J/tSaSTLBpE7o0pKh0Q+xm2XVI+32Siyq1sU/9LW0ewkx8n2P0Rd1ar/avxHbiKKu1052+fW0sDLB2Q==","shasum":"ad49be853b1497eba7319991d2a87817e4ed8ba0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.32-test.1595792808059.tgz","fileCount":6,"unpackedSize":451629,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHd21CRA9TVsSAnZWagAAlTIP/iPpvbA1YBZ6TbAk8QOE\n9TjeEuTmXn5UqVDOEWjmTdLwT9P1EwfovvcVcs72f1QhzTfxyJxhIF23sWf4\n/RIDd3BHe6Bh7bTfV1UyrsnElzR/P7uFk8IHOMOFwIhhy9lc5QEO6wFTnR1U\nLhkiCohmqNsTvc6eEHl+zvXLJbIotFk/4K7zwq9zSJDkHicFepWlBMVY4QwI\n1EVpoFxHX4yIW3C65OWVYrq7sbaFYHUCJIWGRLUaHAAMCSdUt8WWGjBbaBAR\nQkRwS6sck1vDAErASKqpn08AqBDOIZv5m6Sqsy1dC8yPqN+l4AejNx7c9w6W\nShnAl0qJ5BwXPx1gd0nO1LEBHYU+3O9d7k20lVUSYDAkrrc0T5dqca/Mdm4b\n4lWT/AfElNVgACInpqX4DodwaH609rW8G/SM6RwsbIUJSALzs/R4W87HhamW\n0uhnZhslVRLyb4OTC6lxJ5h9NAI42hdGSmHtT35JAV7CbaZKcPtwgsPFsJzv\nZa23D0y134XwOCVH9zaLLag8o9Bh3LF/c46zwjC6MBx3NMliBJABCmFUgbEr\nE62CXvbJxe2uBSc5qzk2ajoZ9qq8mYnSQ8n6of7C4EwkrZD/aZDTXG1LYrqp\nywZFI2J/OIlxZH+U0O0yTExy7GGS9H/4cQV4/qhkEI2n9b0TginMy0aLORgQ\nVO19\r\n=7ckp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVwEPVroVHJKBoAIYAqKockN1JH/o60gkOwuVFvI0JIwIgFMgixsPA8RkDneU5APtoPWdGiv+hOmWwgPqUyg6hDN8="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.32-test.1595792808059_1595792821038_0.1350335502862472"},"_hasShrinkwrap":false},"6.13.33-test.1595795486392":{"name":"ts-toolbelt","version":"6.13.33-test.1595795486392","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"e0779409a11fd1cf50d1330a77accadf45a6ad3a","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.33-test.1595795486392","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Qn7SMQM4HvXIVimUgw9quUTzHD8d9lv2zzlXEf3C6b3TSATZddbIXy/OkKnxlsPoXwimt9MfrKMoHdAUI0iF4A==","shasum":"34a6df6b1725f0bb881441f7318cdde00875b49d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.33-test.1595795486392.tgz","fileCount":6,"unpackedSize":452170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHegrCRA9TVsSAnZWagAAlT8P/1HVSC44UK0X4XOKE+xE\no4MTnTFsbCsE6l1oMCVr3eTHb712l869oWsXvy4YXYh4nF2Bd4XMpUgQy84e\nl5+9xTr0NfyGCzX0fuZZz8uDzXaPdholAEM1tDKOB8wd84MHOUOv9qqavSNk\n+xWVYJyvsCI0p5AA0okvXqoHACC5giSGZtIEDL7NA0tTKbqz4Rzjz/VO3hMV\nULCHBvB1QJEE4mcAUxojMzyHve6zDjq+nGXA8dKFchh8mWaIDv3RRHUQlZHR\nBePM/fKdm0mYvU3PiEnrP7+tu5Qip6zGKELU5ka24jBouQolr+/A3LSdj4d6\nZGrTVhwOVRjNOQWUVpQgrSRvf/3Rys6MvhXp6EZV7m/UXOk8BmtS7kIebiIs\nu0wwdg8MxcReAPuC//RdarOI5GAUj5xP4jJ9rgRuWL5xSMOKvT8ps0LnvOe9\nJTCvAemBuPNoaj4McWBpQeElnJeSxhaucVPr5x1dWG9uiZOA1BAooGOJYNq6\nb/iMEqjgGcQ7vOYco49LIHJsQooXRcSkvuhnpDdWwHxccatdwJSQjAjqfr+r\nXsdYXE18S4tRHj2aopm8K9p9AkO37MMDILlTdpq3hkTEDH4z1XW+LKthegg5\nSlXcWEUmvHqqHfFzGio69exTF5MwHxsOxmNOGHvmCuowh00YcIhxv5m4e8v7\njiaS\r\n=ddKp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH9LRd5DYLJeN92J6G7l1tzlFgs83GxmN3hQuYXQKWIyAiAwyihWuzCCgNaAQvapXP8ioGEqUgnRgfrPoRwaf3X/ng=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.33-test.1595795486392_1595795498816_0.5685454185472185"},"_hasShrinkwrap":false},"6.13.33":{"name":"ts-toolbelt","version":"6.13.33","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"e0779409a11fd1cf50d1330a77accadf45a6ad3a","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.33","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-vX12vIRMYSY5/5NveJKCMsTNKiT/xnNLVBzI8QRn0DukzylmYTI01vZpmFDF7uDaVX/Vq6Cweh2ckIv6AibGKQ==","shasum":"3ca91734e6cb5f74eb7695e398fed45f71571568","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.33.tgz","fileCount":6,"unpackedSize":452151,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHejwCRA9TVsSAnZWagAAbK8P/jYyg2v9jPJIaYpNZodC\nzMo/r9xf3W9nDemvMBbbHAeKHu5N3ywwd25nEDdV15was6/jrE9XD4rORBx6\niMnEVcNRYpzWkk7btGIZ9W+YKN739aCMoHd6lwNmstkgw9jzYv5fvL+BLjet\n1+C9DqndiIdUJGuLNo6elXST9NXRMBvN+64spaGJF4S13JucTl4FLrjTZT1H\nmxEAPt5Rk6CvaKRLvpalHKwHct1pxODWKIGlJhw+6ugvgKUV4JfSHKWyMVW6\nmioC4vG4z+sLv8H+z2phBWfIP1v5PUV9CvhL6Dyy3RR7QnVfvDcolgtdfnVt\nteCau0uxR9w+LDd2YiYAmeXZIGagD5Uc5YrcXoyGpho0Hqa90d498fm0drBc\nhFXhnQC7Lf4wQN8uOZalmSV89mejq8R0vgZy9v3wqbUHF6vS63IB9qcJCJWQ\njVhiCrd9e3QxhD826wgr1tpIMEX/1R8pD+ZYKCEqKhexeNa95mJ05mU1r5yu\n+ei+7ja1D4BLvkEA2nrgTdmwicm8buNyPvYwzP8/oa2DKI/oD2ODQF7n8MCO\nZK+CVAuXvlgHwk62Lx3W0+ONNxFSU1PfoRQv5CcnKyvXXLm07j4Pj/QB4W1+\nq7MW12hxJEBYDg/6BhHJSpyKeZlWwDXdhXbdH8x7o1+3FNYAqnxnD+lJhlEU\nhi5p\r\n=VFnd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC51a9qgyh021brYKxupTWyfzE85InR6RFkAhTIZm2cmAiEA0huJO0FEBu9tVJ+oxiHvdVOYeElfjwTIv60n4DDxHZ4="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.33_1595795696042_0.6041311377870309"},"_hasShrinkwrap":false},"6.13.34-test.1595867675822":{"name":"ts-toolbelt","version":"6.13.34-test.1595867675822","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"c0d9ceb03a71e4ca9a51f6077662cb754a586aa2","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.34-test.1595867675822","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-yofALSUxA+yYV7l+4HbyHpKOq4EcbUWJwAUAoiAS70sDspI3kZXJlEH3IOzjp9TIenpTurD0Z6NncIsK3Un9cQ==","shasum":"b520ee45a3e5b7ae9967e0708f63663016f70be9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.34-test.1595867675822.tgz","fileCount":6,"unpackedSize":453453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHwIqCRA9TVsSAnZWagAAEMIP/22HnJ82pJrH+5KS/Jem\nYBZBTeXL5pxtRL8OM8wo8Ab/gR9WoZoftQT1C4fu4yqGzZjKezV33hkjeUer\nB3OLp6jXxBK/nI7tFargrImMpbjTgeSqUvXako1GIROVSPOseDn659BlFy4E\n6WVRS0+9ikr44bwjHmxEjfaMZ4kiMkmM2DIIFRu+DFrpRwX4CgT8PUKbOmvs\nbZXif4GcOkVaQESx7dSG5yOyQEyF3cx/RwD38Nb/if3NLxKzV7F26hkxKhLx\nGL/7RZudto1RUlpzEtLTA3Qfr/ykDPzNiyeVVtDT3wrU2LqIpe8Hn6lK9g14\nfYMJkbSuy3Hl8NAgvWmuJ0bLr1ZX201lS35pIbngBhmzwNCiVNKD5p2huXYU\n3gTHboF6RLD9NDwvncZTpw0D2iB/mZ5FugvfM+MQqz2aj40cAHGbomLE0saw\nGuaAKU3VhyaciM//FpoTVboN0r3SGyBCIstkU/AhQaGHsVa/YnkxSRBasm1g\nKw5IEFMzBgqVM0fVfUuXb9ECP6iMGiEarMMCasBko+AxKKJsxIzjYZ3SBC4g\n71E5R7M2Bu33l+DGnn9Wei/gWtkQ5948D+mBZ6Ey6zeqCWibasEz1wJhp6Wt\nVCFsYKvGxW8jNWYT+SQUXJK+wmxd9LxyTWAvKoEK2pwmnzP+0sz1JaebRMhW\nE3wI\r\n=mDcS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzuYrtxN5OyCNyNuGjrAoF7TR3RUUShge+kg8r15KT8AiEA2Ge3TrIcGkfeznNFBEDho6fMMR2ecWI5ehpo16qn+MA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.34-test.1595867675822_1595867690248_0.5930945214135204"},"_hasShrinkwrap":false},"6.13.34":{"name":"ts-toolbelt","version":"6.13.34","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"c0d9ceb03a71e4ca9a51f6077662cb754a586aa2","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.34","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ikZwSUPO+fW+OUnyER1KCG58khTi51Di3+iVdhkK7UshqkL0Ir749B2TQ44o/khkKvDSOMzF8NuVkQLycDXnsg==","shasum":"3bd6e1e333a75c5ddab584d293f35494cb8c9222","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.34.tgz","fileCount":6,"unpackedSize":453434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHwMHCRA9TVsSAnZWagAAXzMP/RQkKarXFdazwZOvwY16\nlMGcZtM/Mya69ku2jEqzZdc+dX+HXRTJgiVmZOMuL/3G48cqstqVHjQrM8kI\nEUPZQg5BQfeT4eAFxHQ399lfU0Zfn75Z4U6B6r2y75SMJ10h4ioM/3EUMfdr\nnJRbUvMcaAKci/Q6aGh+opJMoeaRx0v1l8EeJVwTlmBiEiPuMDIBEIXdEbvQ\nwla81xWPTGMwrvZvKl1Ah08s4eeUVRUX5mpEM42M6+0bCFymHvoIyAPRIV6W\nwaFAvOM5ksxAsPjK4wN6Y4VAoilwUKZGB6PjDNh0JhskSviZuwkTkiJxDUBs\nA3jyiP64EvvmkZje4IQhEZmhR3mfirfz4Hta5BfFk+bLI0Tp2HLCDWukcgX6\nJ3R+WJsIBR83tOvjZvulORAoRgj3VPa/gm6KwB3vh5nvPFyxa/Z0yokRPH0l\nvo/sGddcN3eL16kZWfSuhGzOqGeij4jnUly22toCfI5y/WFrtim+A7a48Eu+\nWZj1PdOdeINm8z9VJghKo7G7YOr+MNfKpiE1Ivjp//Ut4anHYTQmPU9B2Add\nRPusFx8IMzzN538NswtXCRe9RRzSRGObyfGpNTdUu7UCnuEFS9GdJdHp4u+I\ni9FzVZKp7VBeDQZeP/aP3KI4faQlz9vSYNkdJLnBiwleZhX7P5JYvF+OJI0H\nrrOc\r\n=43NI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBf4b1jUFytc+I8tbjBY8Sz2WHUeF2GnnKY1IaoLDIakAiEAgTRzNZnrXjfSqzHxvKM/K3m7wWyoGp/UdibgGjthVqg="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.34_1595867911196_0.057032217721246115"},"_hasShrinkwrap":false},"6.13.35-test.1596042592847":{"name":"ts-toolbelt","version":"6.13.35-test.1596042592847","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"943408a70a27e8874122bb151a18b88311ad4e6f","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.35-test.1596042592847","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sMQib7/7gsl1KTgFofJeDZrC2kNRib5SEIHe2BGRTBdZH1vh1Q+OIJ9NA+slH4HpRxc6p/JPKb0FnIzZW6p2bQ==","shasum":"547f8277829fe933122d6808a952753b8d8aad91","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.35-test.1596042592847.tgz","fileCount":6,"unpackedSize":454941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIa1uCRA9TVsSAnZWagAAJCkP/RRDgHUM7ZIInKKUj4Km\nHMA0yaV+BW0ut1asnTvv8S+70JDvr+4Ny9FaQcGtsAmfuDSSygVuL564u5gq\n5mt/DHMelTwHLaTtBfUNKB56JIT/eYALu8zyXj38wbaPv7cJLv+y8/seAaCH\nrrqYvkTj8pTVUQN9L6V3ilCORJJMlPWoJpfimNWeVVCVY7cxxOyBNvfJWmb5\nT1f5/kjEmLHZ3D+K6/35mVTmTrGUPpR7AblTwOnu1AjDj8iwQnVlfgggR0p5\nTM127NtxXfnHzSQ9p6yUbNI+DKjGpEV91yiA1nGLudleuTDzy/WYI3pHdgPI\n9yp3iDBcncgreR3iq0KdXYLR+UVty4vHfcN6gfTi4i1qJhsN8U1KYiZULCF/\nOpjqs8cqNSS+XrU85zS1/qL92+Qr/z/ODurW3pr7BXdcqRCgK479Iw+S0Bcs\nV/khjuycac2ICedrjQBF9rYYwPXHamayGT6zuhmf5dNnZzyGVeBnEke1kdWR\ne/C3sAzwV43B8hO7sRtglzSieE+OXL/q+30K/ZFo7iMVnUsT3E8rwLqY0MDE\nApoTOkZTdS8R0olSdeTaFdYvRFFM8didHZDU2iXVD0ARtL8LlegDWJ7/KGB4\ntoZyVA/vu5HIC++znTrgtoxravhna4yj00rN9vSz0gke+phZIxZR7n9mWsjf\nze2p\r\n=y7aP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVI38AIUVsH6aWqDHnV/qpvRKXmBTdndnKoLmPZNUNlAIhAI8OInHkT9gQR8ckUjohKtYV1tlUXaZ5QTuspDLGMFXE"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.35-test.1596042592847_1596042606253_0.1989832521218109"},"_hasShrinkwrap":false},"6.13.35":{"name":"ts-toolbelt","version":"6.13.35","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"943408a70a27e8874122bb151a18b88311ad4e6f","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.35","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RUlJt2ku8jRCDEZsyCvAYEPIa+99ZpT9YJqccWh5IxDBN09fk2epMrYWiJ4jSFRHNvTx4DqWRP07PSx5QPbflA==","shasum":"c65246af560387eca4e19b71244856bd13d75d77","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.35.tgz","fileCount":6,"unpackedSize":454922,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIa48CRA9TVsSAnZWagAAF+EP/iKJz2vc6T6VNZD1yrrY\nzggh5jDBQES0QZj4At1ECq4KKKr28BWxqm+EPr6K4VlZFxd6zt2wDZxPhrn8\nZXqHl03nnKpamFN2uKaRYshyPEz72LyhDNRiT0HB9p7yAjyJtW9VRK09tRnr\nFUqy+ABSLe7wY2/RU8Peraf7y+v6/7ZEA7K2fbjYnuilMNRsn/sWMij06Hty\neyvQDY1QgzUrOERorT8A8LphjopBzuA4xXZTNQKDv+9G84Nq+bbbmA1JZR6M\nGcRSKyPaOrBY2lp6rbW1yv266l5NWuDwJkX4KrnC3C6pxZC2iOVzFM4IFOyj\nRb4ZeMO5oSzBFxf9P5C9ASLIeVstxAimLlmcOrkZz2YR+ZJxCSyJtWKxwzKp\nP9QvJQ0hok6hM+WUDIOqh8HNzdDyKk8OrYNQ3DXx59pwaGmBo708cvmqPAbI\nSQYDoiZza206bvGh+ZTLy1DHvuuRw+q9CQ8NxhpwqMN0vARvdQyGZ1Dtmh60\nImOXrciS/lKENKrjR4tcF5Lyb9QdN6dcXtwgO7JaMnIeYq0W0ju0n2y7R7ri\nReh//MzvjgmX7RP9xHBlFwsK4kZEYCn6kaLziL+09+traaILKaMg88cSDAeX\nJmeF8MMYlJUr/CHlcDJEI9PLZWrf6In/adFavKc62l7+1E8DgSMdZk/sVHNF\nYLXm\r\n=QYoW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHmhjhQXSp1aEzmuR3XzzgmgQb+hS7J9bNvfbvK7q6pTAiEAoYpctLd5CTVcdgQefNPcYaaLFtl0GuDTFWxoq8HCR8g="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.35_1596042812173_0.7956123195191249"},"_hasShrinkwrap":false},"6.13.36-test.1596136831844":{"name":"ts-toolbelt","version":"6.13.36-test.1596136831844","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"6ffddf5b4fc467f7eabb0b219f30721bde886f27","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.36-test.1596136831844","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-8+at59QIdUiNbO89rOLQlFXMTFhrLZv6UQZS4lrDLgugEmkIuSDqpgQxDMC4HT7cfNL7865FkWMAqUdwlBdNTQ==","shasum":"464e7c26fdba8604308825167188770b55deb3fa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.36-test.1596136831844.tgz","fileCount":6,"unpackedSize":458090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIx2MCRA9TVsSAnZWagAAq88P/0sVjKoeSQlphJgNcqju\n+Jqm0kbiGRG5yrqDKZwTck0Ph3GCmN4eRDEqqu7HpcD7C6hlXT8hfA0Fe8O0\nFGkW0GwXcYu7xPWuEYFb2b/V8ubxqwh51EzEKdJcPJuu29rEK33zwPYH6N9T\n47vCG2cKcYRRQoemRXRdnh9ROVmBV4AjpclEvtYzzfQhcs3x0b+p9Og35N71\nemQvdp5XpKTLfRBMwaSqYWvvGZ4W6vAPhyt0X820xtcLRJjRCfETUXBQOH2R\ntq3RhITOWHnkVggnoUEj0GzGVFzMCRaHzjAu6+umLnDEKOqhxkpJY51KruaV\n5ktrK6iFNc5+vS03uh8iZgdKjcrjqgXIcS19xBBluqTA1G1fQPQzjl0sAaRs\nDc5IWtOfXCCPIj0+H+E6eWKqgiGIq5QDcUfScwxSDkHdwYezn13QGZWAgJtA\nEtQeT7pXP+GSx5p90roM18S1lxnffwEgIVnGcvBkQ2GQ5dCCW/WJL8RNo3f+\nsesIzV0ortFgLcd6H2lrgwL2lwN7Ki3hJowLVWB8e7FhnY/R8x6gwzNs3/Rg\nP2KGQ6br0Lqm1JfbSruk5ks7hp3k5D7VL5Kxx21So81zW9sONFYieuGXzhhP\ndiN436+Fo8bqTXDhZBkPaymow2QQ3t5w8EIwHF8zdkGctBdTZNXQsk+t13ma\nrhik\r\n=f4TH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFr1UdwDtDy8YNk5ZFApjDi9IMbkFqeUdzU6D6ixSNMYAiEA/bJ1JU9SDu0rs9ZCNqdJRoVBeeC0mR2fKnQqoVU1e9w="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.36-test.1596136831844_1596136844055_0.18926696998898307"},"_hasShrinkwrap":false},"6.13.36":{"name":"ts-toolbelt","version":"6.13.36","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"6ffddf5b4fc467f7eabb0b219f30721bde886f27","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.36","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TxtCLq+Hze2myCzUa31hu8cMFxYe3JpIZnCqaKvkHELEpAm81PNlaxC1UmM9cD0BqQ7XxYPIvQYBmvdnAfYzKA==","shasum":"083e0ccaf610edf743cf6cb18714def45eb27d6d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.36.tgz","fileCount":6,"unpackedSize":458071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIx67CRA9TVsSAnZWagAA0MQP/jOQUh6t2FzP1Uxedflm\nwiZjwe5YkRcAQkiuhc2yvmqYvtzp0TIbVfkHIcwbc90nA+gomlI13tLuCeZP\nWAvzJxePcpuYmnbvtqQwgzwUqPI31rWVUbMbpsyOQQqN5MWof7NYFOvPFM4H\nuhef1DvTkvKyUhkbrRrdgsmW4D619ZZsPuWr68gVhOHh8NaXzzfhbDBOIa/R\nf/Mp+EpolBiFAv6BBCn7sufN62PjE2dz0g3hAKA/Wa5GfvTfiw2+7pxwr1eL\nm6mi5GwIICLy0b9Qp2o06j49weU1lmECfNqXN8QdXKTazohlPzb42HmmU3ZO\naUVAC1thdQ7QEMzygkI0lwumYlCSv6wO/fWH9BKhNZZQFtgww+yWDbbvVG1t\n1rGGu4X2LmXj1YIDLIHzrSLRL2WRkMyr54YpJT7kCZKdMAIBXHc6ooATD7zR\n57ymNASHbf2N0EMiuzuWCKvdJPr8k8qcJhlikJ+ex6rzNvxvi2hQ9Ekf6uYe\nQAQX6asK3z1bAeBfKEwjMqc8DnGiqFjDnMs1EcLm6SCOZDy6HtN8p4UNMJMd\nIL2Wqe/f2ffgL/nnGuKFPEm+8gbXQcre4NAD226se4/8eATvo/IopA43wK9x\ngnJbjnvYgwBJ+ipTRfTpuNF+NwfTjy598M2PvS7Kn5jOc2cKhnD1jm+U6TH3\nXSM5\r\n=Voji\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpdSp2qPBAGASfJUEc9rybna+gzlLH2ByLESRs7YUtoAiB/cezmaU35YTYjDUMt4/ehFPgq/7HrJ2pw7NNBrHP9RQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.36_1596137146628_0.004925548693000437"},"_hasShrinkwrap":false},"6.13.37-test.1596192014295":{"name":"ts-toolbelt","version":"6.13.37-test.1596192014295","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"41859fd7385886da9aab0824cb7281d8dd78c100","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.37-test.1596192014295","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qEnEv/IUl1fToJdbaXq6dCAnTkU0fftw9Nuw3M5RvTyhsxuQ9DaMz2YEvUz4ovAUsMg5DQ5KVCjPSV2TBN7ilw==","shasum":"e2cb620e2e18de0f2888f8a13d5ef2e584b1f97a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.37-test.1596192014295.tgz","fileCount":6,"unpackedSize":460247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI/UcCRA9TVsSAnZWagAAH6cQAIqwBcXIro9R26gdX9sD\nfnBEI4e2ml9h91DHkyOqvUXut2IJ+xqu1FRhZU2/7Ohp8q4Pd0DcSv4isB0Y\nC6yFvTH5Wrn3qdGJrLaFqUjrKnqMeY8Tj2xT3irPoigPMmX6q2mgBAhU8SUN\nMUUyuXfyB9JnaYDrkSuyDOUk4px3R1PJb4My6ky+0L/Kz0/PptwzSKiEk2Mf\n+g4AU6/tIwP8TQ6x6AmwyuDZF37i2TCtB7Pk7ZoxtILXnPtkQT27EVPnoBBP\nSh02LM2YllMlg9zuvaGhQAgINPVGNvhwmn7QfJrUy9q6b9Tv/gPQUeejXLki\n46IfbqF4GTa6sCZ+onxmeuNNmuLIxzI4RDtfHNEYaKDzZfS7XQA2MDnSZBM7\nK02e/UHUzvsUUmt4VRpjcKFv1oNi5HVO25BxFit3tm2YufA/ECDOhvCgwGi/\n6C+js6iQ4/EvWVnJ7aAcwxYEikb6b2+Oay5neu7YjNwuAJALCeLerBTvGg1O\nOQwIxaDkq/OT7y3JybxbAd42MLwRVHbyMN/pJKsLQNmv8m6J1WFcndRo2LjJ\nJ2+U1b5B4HumgbsKpOP+hPxprrM3JXOYvqL4ycKu553kX2XmPElUZViZ0QLe\nhixxbH5geTI9b9UFfAVyuzddr/GA1t0933UTeMrvEOfPPq7FRTxsxMcwWQhe\nuEMe\r\n=ox1P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnNSxGDXkC21t6K85jhN8X7GqtSF8dRBFaivL5LHDKxAIhAMNqLQxVnEJ174kcascmCEZ/kPHSNePR+SEcDo43NaKK"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.37-test.1596192014295_1596192028357_0.9326321371474025"},"_hasShrinkwrap":false},"6.13.37":{"name":"ts-toolbelt","version":"6.13.37","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"41859fd7385886da9aab0824cb7281d8dd78c100","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.37","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-K8P25O7Fx+zHuSBJNQkdwg1OYRA/zerWNltt1EXLoPHQ8kP5ADhJREQgZzi+ka+rHtx0/i/4AdWHJi5V1fdEow==","shasum":"3bf7993c973b02371a598348c586e599faea4fe6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.37.tgz","fileCount":6,"unpackedSize":460228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI/YACRA9TVsSAnZWagAAyJAP/Rw6vU2RZDhY2NvyKzAJ\nuNNJPC5mnF9QrC4SXxV3f9Jazt/T4YmkcsqsRAragTm9WYgSV/V7/SUf14ZD\n4AyG8eW65RmqIFEj9NVhmpRlDLeu4mONyfiPWg8On5xKhruOJpR5R4MLPOVk\nuuBsGFUzbooF7xfVhW9h6MVBetKMCTWHOzyjl8LompOVHjmc54jyTA+fNRXu\nbYqggJLWjtxqlfojnQgm3RpyiAQHhQCm8ts2xtRwbrEbnSRH128Z0SvFKp1j\no7TA/zxP4+XdrOh34XYnLVLsQ24L6w4OgM1ZErlJOnFS7EfbPKd1eO1fWA3c\nnTPZa0wXfugjpUYt1cbNdZ6q2xU/98PHIHJUHGbtFQmJbD1gtK5hnsqEwddG\nbKMn5SNUk9QiHMmU6kMsjhzdAq/awZOVG6JVVJ3IV4Eio/1YxkAPIh7BYWMJ\nL3kGZZERNG7Qde3+kAFRxJqijqMIUrG0qbYCefeft+CO8ttS/6y5plSNG/JY\nObfCaxJSW8H9Aguj64DX6ydmQ8yIwOUU8tuBfBefMi4/MgNHigV74LKwprgE\nzZeh0+/ohz4xEZsA+hVK+Ptix4eNyHeOHis/HxPAMJQNKdaFrIcn9zR6w/jh\n9ZbVlkj+c2HDUNuV4Pkhry8KMeA/Oj/Q9IW8BJVTbVtz2Ps7X3rLYAj5QquH\nehM0\r\n=ii/q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHV2RQ/SYn6nUMz2Lny76xsVsi1HS90iJKVGUbGtRAlVAiEAozdFrEYbllxx0wvCA/WASFfsd1heoqYtj3xAEkJgBsE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.37_1596192255507_0.8008729898521305"},"_hasShrinkwrap":false},"6.13.38-test.1596397940034":{"name":"ts-toolbelt","version":"6.13.38-test.1596397940034","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"5e20d128c904e43f3adeadf3f71df1fcb05f90ca","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.38-test.1596397940034","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-us84RgYbcG9l3gMHEF3bGspFdSOMG11nQlsPkbM7Fx3xgdpAVIgMfZ0EJKS1iI9EgXuASmPCiBlrH03emNl4Og==","shasum":"e397bb987d4bd36dd29347acc066ffedbe807d63","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.38-test.1596397940034.tgz","fileCount":6,"unpackedSize":462206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJxmBCRA9TVsSAnZWagAASs0P/RfYP1HQK3FMw0U5Dtl0\naJFCSLTKe6oPagqQxD+CpnJov+H7Y6OmsknxkB7naOXRNSYmfm/d3jUzI+OF\nL2GglN1QC8LQrc4MNN3MUTJc/rETsfiLeKYFrvBvin58bvKeltbuP1jXNNsA\nPzzoFY96eodoQtdgRSW48XzeUeYsCkbY/LPSS530IbSwgFBUv0uAIl1XWpRp\nxqFul26WwnDHM7xul6gd2oncvujnUmmkvdcLJ1lVm9HxtpzQEUfNPE2DqBbQ\ntNVtlurDuP2/nTtyGq3uHZKPF3CcPeVX3oojs1LiZ3sjxUonYvk+3vZuiUmV\npE1iSYfQb36YOjQnTVvI/FmcecAyP6acWOABq4H2i4QXL3Gt1nUtWMXUccQ5\ndxOkbptfNcXSznOcoHqUmQcS6HlGdrNtSzZ/B6yq8rKTTh3y3tDpn4K8W6d3\nLHSwugdrzB/2P/IxbRAVKiolQueTUqAismNuAreYj9LNE5wHdWhIS6OaFJ56\nXIVj/p6md6Thp2/7PFUE35BjoZpHXrUFGurqB79qZL212waU5iE0aEYC5pza\nqlAid9Rcnx0bMd3wkXH0qXxAv88RU6to1l9d7YqvM9zxeQEKMa1GoRtX4ZGm\nX9mcDHzTA/5QYZeJQcHvGSip6QA4U/4EVfYJqvl9qH0PHgb94TmqQ2NTbaQ1\nsnHK\r\n=UkGZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRtx6+sFCx1n82TMsbztdN0edYzX8W8BtBPixMaAjEiAIhAJWrC92+/MmyRce3VZUtRzpO6M4lJSs5P8EUYaC8EBpK"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.38-test.1596397940034_1596397953015_0.2785284649745934"},"_hasShrinkwrap":false},"6.13.38":{"name":"ts-toolbelt","version":"6.13.38","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"5e20d128c904e43f3adeadf3f71df1fcb05f90ca","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.38","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2VuQdvF9tT1SOTiKWcu7dewykV4hqYcQhGrZUfGzszMem8FnSZf+whYGWAk5Fvo5KFqrSDd1IMHAOO1SxzbrRQ==","shasum":"2203566bd678010cf06636067eac1f1e114e71bf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.38.tgz","fileCount":6,"unpackedSize":462187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJxpaCRA9TVsSAnZWagAA+GEP/j5e7/KR4Hbq6RgKiu6t\nvR7Aha1pPaBODzlh/k8OQnL3drZ3zOS0LAWPT2jAoqZ/DL9iH7J1Dh3bx0GK\nHE9l00K3Nqhgvia6dE0IvdMD+au7Bm++mW3EcpkLo7QT0cMEs8n7hAoyxKf3\nEHxLWN6+te0HIICDkBrTvln/LgSD/g2iWHtGF2D5SeUxsPjcxx+5RA7AJPEI\nYI2CwjDUXzVYF2AD3efp4Ax1gCn3CgjlVtM5tyydmFIHQLeqk8LmXosztwZ3\nzCLOxVaLjWYgaOqHUtcoS6L2rRzIj6TKKMe16JYr3SiWdQwsNrS1joSLZQk3\n27ed5H0MbQHuW/xq6IkRTpASYwtCcFkPkAQ7DLIxHbVoXwD6tkJMGmavsnjE\n3nxzmsf2IPbZebTUE5sO//boTKHfZV0MBXLb3OHBukdfRSOV/IXu1hCd7wxD\ny2cvUsDgZijuzNvuO/WjlslvupSE+XHZ2PBEf8FqnybQ4bQm6nW3v3OS3ll6\nSvYz6dHyHwxMJPtmgqM0zoLm/ebXFcm190/ffSlUJAujUEDPZkQa4tP+K8BO\n9cV/9pslfSSa9EYe8q4fC1gephHW9HnL6hS8OSD5opSTfEQ30WqilauWnZ9w\nzUe46Fkyupetj61b0sTHt95sAcCtWEEMvWB2ffQrc5qj0U/DeHaBpLrc/CCi\nguE7\r\n=82Wo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDv+yv799vwXzZQg/++kLTYwlHutUFe/BxKp2IoPQCVeAiAMBIDWJyrI6XzuWVlqNcXTXeh91q7BbdqVEh0+EhgJDA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.38_1596398169529_0.8503322089392074"},"_hasShrinkwrap":false},"6.13.39-test.1596402732352":{"name":"ts-toolbelt","version":"6.13.39-test.1596402732352","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"f130dae6665064502e4113118205babd59888ff5","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.39-test.1596402732352","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-CqMSorjXUFSRzCfA1uxh/ON2XUXW9MjN2Voo7khkCXAt4ZGQ4la+/9X9eNBSkq4Spj3QzT1mS9sw8t5vuK6Wsw==","shasum":"83006b4d30d75c184e675288da9dc89d1ec39ad4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.39-test.1596402732352.tgz","fileCount":6,"unpackedSize":465584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJyw5CRA9TVsSAnZWagAALfgP/0Cjjk95UxsXECujIWaT\nATfDaoGaqHNPdN0Ff+tau5Bf7HfBJJ3jhR7fj177LXnsjDDwW0r/3ePhqUah\njQc7v8gpST59qBKoSxNYr28QUjgIPptzOice2Y45UuMIyN7ZX3aSzmLId7CF\nXSakrsjXFu+9+f7ryansmnnU2S+m013fSObBdt+z0Mglm4jKaTX7f2owVGC8\n/6G7L2DZi9walpFX2tqi93fOG4vT2aJR7l0m3Dsqo2eSd3jE06eoDYRhsCFY\n9v8OgLsAXxfFg0KzYj312uSMXB/9kdzdIbZmRGeY8imIhXOufkQa0UHCRrql\nS2Q6aZaQ+c0rZh+vBi4wnJKOe4yX7GVG8bBFLGeOnP2tJS0nefoO3FyWrMA7\n15p+N5daH8KeYUAhS2owKK0g99EWz73KiiYGj7sbYmi7+Q4TZXN/o3AHygcv\nklU3Sa+g04q61U6KHTvs9DSQXYakUleNiiKTj4dgvm0u9HoThwjwa/CllnlM\nuJu6wYnDBcjooa6wOSOTe7d6BBBDHudWxdFV29V3keFyAPOkqv5pD9IuyX2H\nfOvYMC+LDl1CfZiW+nUqjBXb6Zu/knsVek6sDwG6Er18TQQeVrUu2zB4mVMl\nA+J6QjtlkdxHwebWJksRKfrAlfQ0nUtOSqTz+eINLlcVE0aNKiVgj1omrnaa\nJedr\r\n=38Zk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8yXCjpINRGXCft640ozYPbsSC1arxFA6bUfSYJA89IwIgIFp7I81LTbnJdOw53lDPBSu2uPXqKclD0DrFhyPzBAU="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.39-test.1596402732352_1596402744831_0.3311540788017324"},"_hasShrinkwrap":false},"6.13.39":{"name":"ts-toolbelt","version":"6.13.39","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"f130dae6665064502e4113118205babd59888ff5","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.13.39","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VD/rJ6+NGFA7AK2KWmGzLifrqA060M9o7+R2BxJtLBlwmfEaGdqGeyUPRDKhMZPMgpT/JMQ6+X+/ppaZNzuhvw==","shasum":"80541ce39b595a42be5ddd04e3e6df65597774f8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.13.39.tgz","fileCount":6,"unpackedSize":465565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJy0MCRA9TVsSAnZWagAAL9wP+wXz7L8MFVnvv+LI7VID\nPc4J9efVFnScVTkMvxqHIxUZ/p1BoaTWyHPGia1GSGQgaDl2Fx8+ECE26Ijw\nj3Br8KVQJ9pm4PM7gK1lxZAl01DMAVln2WPTUbe4j5Qkfums6V00BwWFeosv\n8QjQyEsf+MBWhrJr6gyMkiMz3ulWMGjMthovb7OW/ue5pJRgCe3bqmesXCze\nFIEjq1vGeB5XvGOWUUHaUIBFH0WdQiQyHVn343m9vmVn5lkyjObMg94sZ+ZY\nT2rAQKOnbTDI78WHKP5912FHBH27DuuuomAMQUvbV4jFV9EqXmEMgJ7/Mowq\nvHWS2z+U9WxQonqO+1jfxXAfbb7/ng2Em86+2Xn8863SGDOpI67ZwXLekhG6\nllIMnAPjtADIJGirM/CQv+Na04fNm5YVW/HE7UQR6HxfeQ9h89sF5kphKzmj\nYBQNCeUKYwp/rTfMpnzbMREKYzlPZIvd9wYPg34c6SiwQg+dTSumHZQszwOR\nKN5WFEgt9Ub4T88zO4mtlC2Kr5dW4mPIhsC0RKN+VsdgsfzEcoOnZ7TqjXJA\n6TVpKUIhz/HPFz9d30R2eY21OfNvtPXOnnGH9kqZzrWkm8+NmyprWmKkSDXX\nuE+JrUMfI7rLILE4pgWPFVcLEAFK7KZWCPBzGAQdwvAPnJEZFcVXe1Cp07rs\nJajQ\r\n=GqDK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQiZ0/0aM3UT+Qt1FmrJIVgP++TakQrSmyUvvaQVyFlQIgZN53KBl8zEsJbIrwrbh+8vpv7eWzkLH1i3yygv0QAf0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.13.39_1596402956182_0.21853704569435473"},"_hasShrinkwrap":false},"6.14.0-test.1596636685709":{"name":"ts-toolbelt","version":"6.14.0-test.1596636685709","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"65bed13d5332c2e5b4bd09b4dfab1fb09d81552c","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.14.0-test.1596636685709","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qKl+5Q5xtccu2ODD5LwfraMCSa0BpaXRcf1Ah2XWVZu5uPptBEaPsfSaUae7j0q+RZBprSXDaW2M0jVlHFlWNg==","shasum":"f1914073c53bf2af0dfdb7a19c712d0a22e4a7c6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.14.0-test.1596636685709.tgz","fileCount":6,"unpackedSize":469203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKr4cCRA9TVsSAnZWagAANvoP/0lDYjJymsvufrtPS7wG\np1w87o0fWK+CasdgZD2YvKFjRQpNmG9rgP0he8sWt9GK2FRROwvwEQIPXgKI\n4qcGojDPtGEUfeNUf5zKPOymGuXgBsDddIDxetbLuhewkXyEWwOa6Gz7bfNx\nWPaJhYJJY2X1Ts8MMZq9fYNtJggHSlj3H/bBjpqdQEinsfFwNPvA5cnXyiyN\nGgFS4nJ6kHYY45Euyz9vYtCyLIa9VYP4lEf8m8dPJ63Rg8fQuTrYB12TQjdf\nQzfv1DAoe8aPi6Ww3mWmMukUA4p6rUCT+lwEHzlY5Eb5T89yIJcs6YMDPVZX\nw8AgWxs5CTheHZdZtrO+UriyCf2hNojxwYeNoKuP+CJISEkYuX29QtLBb3NE\nU6yl3hnBc1BPO2NuYdaGP9UoLeds0owxFY30pN/A2twKmHA4evoTvcBT0/tQ\ngyBIIrxhDgmVjI8HuomKCG6X8NylGtlSAaB+cvAPLmUJLkV3+04D6dP55013\nPRGTU38o8IDjnWom31Y0nu1kqIiDIlo2oaBm3uCslDk/JESatBOnkxIv3YDW\nRjvI2gJ77eK5XvhdhsoFK6OOxIvmpGorlP/Y8TEqPHk79HucGHfESOVtjdZ6\nmloKme+CwA4FR2i0uutR95myxjvMHO2mynSoJSZ+NKfyyK74SJv6N1KgameH\nTQMw\r\n=SzA2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjlYvo51Np9Hw9bho0s0bkwdOyK8okxb1oj1y0PekNagIhAL1ei/6d1/XIwNINzsLVs7lo4FtuPxuwt13LutmEyh3B"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.14.0-test.1596636685709_1596636699364_0.318670613091923"},"_hasShrinkwrap":false},"6.14.0":{"name":"ts-toolbelt","version":"6.14.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"65bed13d5332c2e5b4bd09b4dfab1fb09d81552c","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.14.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/EihMSk7AQn1n1zad6765tZNr7OCxAP75nS/VGzcZlWLlDa2izLJZV7SJSNDweSKusKuTDyHZhKFyUZW6UUnqg==","shasum":"6f1082c5f59b39ff5d71ff427207bb92ffca4534","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.14.0.tgz","fileCount":6,"unpackedSize":469184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKr7mCRA9TVsSAnZWagAAVuwP/j+G/PpdTmKNT5ArJ1fc\nYj7TSjA2pGx+Fo0Yp21OKoMYdCfRKFQp5HKt/zkKAX/vCtzB97epg9sMsAfC\nLbOOzJuWTVB4Er2xVRwxVo2taiY5OZlO+DgLytQ+iv7ToriVDk4Rkf/gd/XS\na8q+lw3kWX6SUq97DokJgSPQqdmyZaoN7xBlRIfJCiPU58bQ8hJcrdrJpbnl\nV05Vj2CfVZ4DxDAQUAMzmlAGcyGOA3Iwgxf9TF8rAoo4s/NtZegzMtuG+ZjL\nNws1nmjjG/6t2wTkNJ19rDpmIyoAGhx6Reuwja7197YoH6Slo9AfsOmrMEq9\n0ydKuZxPjqsPgKCzk2yr0KWirAAkwSRE/FV5SOgtaRfpCkbUZf+Ag6/4xFix\neIimf2NFUJZww5GoI+hcFgqMAm+XEjz8jwARNssbnOiXgwLhzWir86YYtOIR\npsUEcEX8kOvsu2h90PmeTEZ/9u61K4ZHdLlO71FIceD/082udWuMNBlPuDG8\nfcSwGhcf0sQqGiXv0sp7mar2G+dkTwuvpUjTEUG05yXfs8t+v5ahZzqUyjTn\na3qeNy2ClHaqqY5cd1lWhuicNQ/99hml9HAHrQ0ejJG9V9nKSNyZmMyqRhGn\njGRWovnRyG9VE919x4Rui8l0FTO8AClYqCGn9B3LOOSGi15wa0/tT3+O9YTZ\n8h1R\r\n=TTAs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY0RvC+I5RnNhVxbtKinZ7dm0qmukEO3IIxbDwGOg3NgIgbqQPBZ58XVo7E7T4lzNA6Yl7DTzEVBjFClvUqCsMzZ0="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.14.0_1596636901367_0.6747645900005812"},"_hasShrinkwrap":false},"6.15.0-test.1596637547371":{"name":"ts-toolbelt","version":"6.15.0-test.1596637547371","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"04c2d701b3d289b4b375d7eaa43b0589c63ce3f1","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.0-test.1596637547371","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZkEZZR4MVETxG3GJ/Tx5C7x4YaxPpLfzSzkN/coxhoJ7AAJX+FOBRmNXYsCXQRogLp/d/HD0aFH7+g5XbAzIOw==","shasum":"7d77ccd08e250f6153c66139654cdbb783548e58","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.0-test.1596637547371.tgz","fileCount":6,"unpackedSize":474010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKsF4CRA9TVsSAnZWagAAHN8QAIqB3zTTiymdpn7/X6a9\nggGn3YkGTah7loqnnvH6jRSChQ2ywyEObZONclV8I8JkAN3Y9eC+FkXQG/lA\ni+9IjF9SVrXSo67r4ZIFq6qgQ+sgPSPfiehnYidOCWC93+3wvudsCokFzYnV\nXYdbW1KUAjmlh6Q2zRC/9k4JbDApjZs/1Gl7vIUvE0KLVk87dYvJ8f91zAqI\nFMXv0gGqDcen/fz1zywbZ+n33QkZr1kaQAX/89RPVfW/n0S1YMfheVJUukMt\noIP8b8T+5uGHIALpl7Qx0IeCItRswbs3BchfJvy/tLJkXR0n8KpCSV3KuIYv\nBc9hvSiHGZ68zylduGSIYxiIGzy0t1e/scirsm3epBtqbX9IB5jCjMVCd5No\nJCGvJTS4cisp6a0OCigCDPaRZcHGyWbuAxM+S2mfkdDKwHmul1PDnLYguXqG\n9HWdTKj/RRnhfGOZQ9cAgEtULrl19XPE+IKP4K+b3jQqu+7Qkvz8aHr01R0q\nciw2zi0iRRgDCg6SVMoBFUL4etZ9/VrKoN7Eg48OExXOTa7YCxOeW68yQ8AF\nI88IkdC0yIwIDoHawSKXLOE9VLuhKZxra69US2dMikj+Ti55TkUWq8GCG6pj\npUnxQhwx9t+vh80cKu68OtUBQOtlp974j8u/IheCVJS+87hWfOsIIX/GCOkB\nQA3N\r\n=up9d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoMdLZX+J1MDvb3Ady6kEgPnp1N8b1qL6D/thgrfvr6gIhAKTDfv2TZ6dZ34zIAEMgmw4B4mrlfQXDW7YZ1JyO3ZK1"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.0-test.1596637547371_1596637560225_0.3863845467068685"},"_hasShrinkwrap":false},"6.15.0":{"name":"ts-toolbelt","version":"6.15.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"04c2d701b3d289b4b375d7eaa43b0589c63ce3f1","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-WuXbnXmVgzAGdruH7jbYf4j/0Y4anfMOD0KUU8iw6/4SbzdQVpfso4BJ1Z/t7hKLN2++gWYIseaw/ciyWKLreQ==","shasum":"e1806c4904f5dc819d8dd2c48e09ccc60bfb742f","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.0.tgz","fileCount":6,"unpackedSize":473991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKsJKCRA9TVsSAnZWagAA17wP/jjxH94/Qz+Hp1cxctLg\nY3YBwW3tzL/urmLGibzVqHF/teuWGpLW6ZbwWnS/399wS62ciEuE1cPjeHp9\nCG89KL776e1xmZhEA6kIpf9uAOE0U0PvrwU0Az/DzYKOszlPr/nKVTMM+ptv\n4pvu/0AcsospzdSp7X9NqIviYxbHSW8Ma4VWkBzysd3bimLfbrxNBU6Ua+BI\nft2Nna4DLOTGR84nixsFGidFil71goOlgKT1Hi9yzSwQ7MNqZCeFxChIhv9G\n/suYb7GZIFnuU2VnUjYeaZtRtCu5SPNf/9pNBXuohFylLIx3Vx9dnq9g6TWk\ny5U/yPQCAPelvUgN77Brh8yqXwt3v5wSO1a7RsUpeTzG8sHOqo4lQRw4Asom\nsKRaQU+O7LljPi4FNxuMXXfQnkjHjd5u/V/CvsYaq3WyKJ4gjrfEPIfKxU3g\ns+MwbUm6fnqmXjrpjQJSeOUKmI1PCLdDjsuiT42ViRVAWjvEoWjQbwwHkc3M\nP9mQX0dCPPfjjIj+FtunGxNNqbrkt1Rr0tpJrrmftM8aDgkNF2dsPEfwFfaJ\nJQiEf6HdY2veZxzq5Bx2ip311S/TZ77Jx+2TZBNUwg+Agx1FE/l9vvxqhH4f\n1Y8cb8M3JRrUmaQy5gROfMIUwB7XdKBJdWXg5FCSIxTjy9mZJdE+02Y3gWYb\nXw1b\r\n=10fW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIETq75IyPJiooegQo2Jzry2Bv+CmWzXiShgjLSi9ecoGAiEAmENSxKv6qzP8wDTHLjlhGh/GSjT26yIsRX7H58ggx10="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.0_1596637770426_0.9713913233364051"},"_hasShrinkwrap":false},"6.15.1-test.1596924948884":{"name":"ts-toolbelt","version":"6.15.1-test.1596924948884","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"a2c1fb288316bc7c2b93d622b68a1502a4918258","readme":"<div>\n  <img align=\"left\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\"src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.1-test.1596924948884","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-aSYve43MC00QIIf7+690UUDEa6FSQeggqgMcGyU75rHMGzwUU8D44Ny0OkCVwmhxz035huBgDUEKwG1b0+FsGg==","shasum":"5744c4fe1e6ad02c2b60176a7d22bfbf557d0016","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.1-test.1596924948884.tgz","fileCount":6,"unpackedSize":474543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLyQiCRA9TVsSAnZWagAAtq4P/RYGwbzDXbmjDkg9Waxh\nrcMnW7uIducbdPHVtgboD6ANrvkINva6GWsQ3r66h4QaB31b7HXRKl2Myko1\nw+VY6XWxnxC7MZJ34DY18YkJYsszcm4DzH/qZb6PGU2Dg98dVqVT5AzhYCjf\nRyGosOGMHzfsT7VfHchEt64lqY5MNjlLRF0ykoVea20f9p4uMBsHGSp6OPwQ\nQ7OUsMGVtHG/OO20nMwPTzIPszWaCaZmgfqs2bYi4xBoSGDmXNZu5IpRgU1M\nFyrgs30opJxQ/Vdxuh1w5Lv23xfsOsFS/jLCpPxXZGFxFjyz75Pe9W/9iotT\n2KR0Og82M6bSh2XRS42lWMjkrO6vjWWNAjOChO+d9rqUHwd15yFPdC9yW0mv\naiDoPaZ72Oqw5ZyahJSlzHj9u5TUAhaz8Sq05ywyxpH82MYNtJguRgkO6ufo\nkEq9ZVkur1hJCWlT6b7W+oJMSl2FLMMQRfIAmFLMhbXjTGa6R/ysUg2OBLNQ\nfU3yX4yFxTZGUcEj+8Xj2T+va0kFpGQCJNo44f4J0h8P26tkzhtHpek5PFAb\nHGzeeBJLh4Qcr/MjVpaK6UcQRVBVhXYqcw4a3fdrIiPzC0a03RufBmqmo93m\nVNtkWTySxrdXSX6WIKFCcGNRx3Of2FbygnKV542Pt6hOoh7+FTczFFk54mIO\nbZ42\r\n=9Hm5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDS8wUGzxnHx4nkbLvTZQ/FVz9PkoHWmvQFws4L9MaCtAiEA79sGVPsEZE1ZRaO0z25dhJ6S+AAQPpyvN+JFTwqJJWo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.1-test.1596924948884_1596924961892_0.11669043339368224"},"_hasShrinkwrap":false},"6.15.1":{"name":"ts-toolbelt","version":"6.15.1","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"a2c1fb288316bc7c2b93d622b68a1502a4918258","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.1","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-CdAqEjPqShG2j+YCnCeILh5y2jj6ainzvJH4NkBR6bE/WhFF1x7GGpssDeLmOshr77KsQ6twOrtK386nj5T/gQ==","shasum":"e1f257cf06be8d7ab3b00269461f278b54e748e6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.1.tgz","fileCount":6,"unpackedSize":474524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLyTvCRA9TVsSAnZWagAAqokP/1DDzBfb08UeemcpJRzG\noJo8zRbnyF6xBeNNY8CZEfWmvqlyS8D5qNjGIwXeYPJqXqjfv8+31Z6JoPka\nWXgUidULZ5i3Wv0mywwIsMjrEKs1C/q7d4P2tZShGsoZPMg1qeUnE5JDkmZH\ng5byMBCWb3ePZSjMpVhhmaBGY0NbP8u4iWzB3yUoNLBJioTe7qiu3a5EWE0a\nzixlwRZEaf/qMJpuo3CZcloYCFY7trUQ7xq0Jjxdd8b9VDyK3EsdUOZvo13M\nrSH2u8ttkV5uau7GdSzqs43kcl1/9ePL+6F2Gh4a6JCcpjDha5OXrk3HI79/\npo44DN0/4Ua0tUMRb6EosOJgjLq7+b4ULx7PIb+NoPWd3EKhQqUDtPi4sFTu\npSpBEbwMoZ91YmTPJxPP6oItFDU7p1sktj/1hZ0kPT/vjs83IkkpxpIDmYD0\nfexWAAoJP+9UqJj8/UT56lGRMM5SEAZ3+W3IzAttRiCkVWs32eTVM21hC1YZ\nFB20M4kY8T4a30U/5B7JaT2t956/0y1P33RllVUzqG9P5cfRyaS3R7DvKvV+\nmvU5Uf2ZTeKcM0UhRIVJYybFH/kXp4ucxoj50ngcpV8PRKaNq6+HpkCBfv33\n5DPlYtRi7w1GzMFu2fJWz2z2VJ9/6HNX0+0XjcXr57LDp21qa5cXhGUHOB3z\nl5dB\r\n=lYAQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDT1gDsyMXpYc2atRv8lLHmYR7ONLDksG5YVihsfVKrFAIgfryVOPKeuygwMq/UVo4vCgkSt1mkksKn3mHYTHdJx0Q="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.1_1596925166730_0.6781130499078045"},"_hasShrinkwrap":false},"6.15.2-test.1597138366289":{"name":"ts-toolbelt","version":"6.15.2-test.1597138366289","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"d1268a7d8b08dea718c602b24b16ef0313f1a97a","readme":"<div>\n  <img align=\"left\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a align=\"left\" href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <img align=\"left\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"10\", height=\"100\">\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.2-test.1597138366289","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Q89p4NROUcC6xoHDDlFu1sFCj5vKcPS7ohiZMnCcDAEKBxD35LLPDqs8n8h58U2+WCDwS9vNDFaJnhEED/JK1w==","shasum":"ee301183a693e3c2d2998c86a97927ef24885f23","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.2-test.1597138366289.tgz","fileCount":6,"unpackedSize":475011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMmXMCRA9TVsSAnZWagAAgCwQAICj7ZJPsgqbCvCtGyyN\nVXYLVKaImo/1OeseshIlvZhyDJOC4plh/s1MkppVq+RdC/cHfORhkA2hr1iS\nZ4DCqelW9BjyCSu3z6rGw+agBcXy2zZWyrXZlBBznBvvtci8ApXgOY/GtXKr\nLWA/hZgcReNNzA6NlywLVGTW8S14M6pjk1wdjTZRSHWpO6r6Df07XheTSSBf\nUvZ/fDe/bLC3afyAtsb3w8sMGTFkCKCsShIjtX+hT6wvgjadoerK3tCwbx7S\nhH+d1oSz7e8wS4J/M2gcjPIyApCiZZEs2kZfwCIJM9R7+F4YeNbs4jAWsqmA\ndEADLkjescx0JvDhE6LrNwwmlj5C8FUXGYf8yI6bcWQTSN1vS40bJmq6Q62y\nLDvSSeIK+t6MYTkzftTj+4Ss60/6YjqmYZht6CEd4zSuFEIcH71SPaQpsBkY\n9p1uFXWhJsqwyxpeGlq+UbwX3OtHWVCzd58INWHj5Ip53JrO3QYJrugRoeXs\nhYh05YS90jJ/KPYxlPLMSU1zFJD3Iq7xbBHcDOQUE5MYY6S+MAD5ft1coHJC\nbIAI/0s7gzy/+gVpVKkoHc62vvJW3Sj+Ge9cIbKWwwMkhRNvkfy1C4/3wrEZ\njZv4NGy4O7ydzOZiquGZor8gJtUYJAwdw0KHHRVRaATx2P6QWnSceMNpmBID\nKbw6\r\n=QY1J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMahuNi9IWLlk9i+b2OWOt7VNwD7DnmbsXI8/Lh6anTAIhAOU23ueDM0232LhbnWUaFNyQv+FK9xd12bgFnTizq4za"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.2-test.1597138366289_1597138379872_0.5158480807031833"},"_hasShrinkwrap":false},"6.15.2":{"name":"ts-toolbelt","version":"6.15.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"d1268a7d8b08dea718c602b24b16ef0313f1a97a","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.2","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qZQJu9qTfILfYLmoGCbRduuZFxd7hyUQZOwZVfyUmqrzFgeh6hNCXV/ZSEcv0QTHGf82PrmvziBBmn1Bc7qI7g==","shasum":"63063d54408c537cc0d60391d2c19832c43280ce","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.2.tgz","fileCount":6,"unpackedSize":474992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMmadCRA9TVsSAnZWagAAdfMP/1zJngzrkawggFUIT2CM\ncJFdatDmCMxnkSed8ycumFQhx3rS1SaBKohr1RfYpXfGZVgNDWXP1UncZsVH\nyY7KO+it760RdrcTknt+aQSfa67Qj0hV2m7Q4fDm2qqNzi3QyFIKurNdZbni\nG4SdlZL/9T/i8ebF2bj5uaD9SX9bzl30y05kNm9PONFIzpBHvSEPQRMVhzOt\nUKUyqQkBBG7YYO0X1YMWGwkvW7P3sj61nHYbQcO5Ijsjgaqm9zK6vABMRFRU\nzBC6SEBvmcXvW0or32EmB142MHMZXYuOi2u8QVYm6R6TTKmwgk/Pp/WZ8clx\naMyE35hA83KImJMXVTrYZI3NMGqueEgLfqtwgCFePO6Md+aLfeJUpUgq1vCl\nZvqELSH2zqSERXCnU/3sV347bPoyMfx/yHT9sqjKWietoEIHcXOjIr63mLSY\nFRtXO2LAj+7w9i6YcU5j7sdY+vl7beVcV8guEQ142uJDkI80niaLeDaIVEtz\nCC3wUzV//5uVLOL+VdTx5b/RwtxZyPWyIRQcpSE3rVmHMGVYVDHl2TwHv7V7\nYYr8FpzrnLUDjtN1DyB+v/1H7Xy8ryT+hSLzFChMf2qej15KgZgQ05oXMYHB\nNOE0YT0z7sRQuZtUio3zqHugawEFZADkCiHnfCpHov+k7i6YCM1jXLyc1DvA\nZ+hp\r\n=vFsX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMA8CeZ4tRUaFG/EW+8hkF23jIe7i7ovIVE1Yk4RUeIAiEAnkP0LxJXbBZVmw9jWgB9fwa2DzDpm7u/t67FdOhptWo="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.2_1597138588518_0.39215657844742524"},"_hasShrinkwrap":false},"6.15.3-test.1597150297770":{"name":"ts-toolbelt","version":"6.15.3-test.1597150297770","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"44b2a1abda5c00969686ef48bb4243d3f3b63dd8","readme":"<div>\n  <img align=\"left\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <img align=\"right\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"100\">\n  <a align=\"left\" href=\"https://github.com/millsp/ts-toolbelt\">\n    <img align=\"left\" alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"100\" alt=\"Logo\">\n  </a>\n  <img align=\"left\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/blank.png\" width=\"10\", height=\"100\">\n  <h1 align=\"left\">ts-toolbelt</h1>\n  <h4 align=\"left\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</div>\n<br>\n<br>\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.3-test.1597150297770","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Rj3xvvJgVIP9npq0D7emqso1UxyYPfM7I2VAf9AHbGU0Ly7NUD50AzBNCB3nCCwIGjHBaU4Ub5LsVszhHLZeug==","shasum":"52aeee34c919f83f12a468275ba59925531c5c71","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.3-test.1597150297770.tgz","fileCount":6,"unpackedSize":476672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMpRoCRA9TVsSAnZWagAA7aUQAIkAb8Quzub4wRbn6KEF\n6KIN0yRpoKTvKoYSB1tMl8zhq5W4GMa4oySmi4HIvNExFnkWpwtl/xTkyMyh\nzC4w622rIfF2SWxFP9aGFaePOzL0Gya58o0RESAwe47RH0lzA6oH6V1anVDZ\negXu6X14KjbXKrb0CSzumvtY5oEEtoN/nqFRESN4olZvdjn+3ESV6YO9HWuM\neqO/WlItFj6eF3wXP8ObmX2WaZdnEeZr0uYOyxVF86/NfflUcBDSqGMRfCwL\nTPcxutpDbnmyB8KUAK/5fHHnF3IwwPMrP/8wwm4WwWGSmJLnsxGTte/MUH2C\nJDA1rchdo/bVQagb1HyypW2AgMaCYk3EPdabG9iNCH1MnPt2BgQFymLgBg00\numR+mvOINfobukZTdCLYRGz6BeloN/wCtZucvASC5Say7DaKs8smPHRTDByb\nKIM/pOGTcexVlhUDX0zhkHMstGbcXr7kh5Y2V1BKkhBhV2+JlXFPkRQn/J9k\nC4AXjMkEezfpPb2zxGhDnJVlcGOu8I8H2l6UUDmF+AtNkDyKPQMuQqHDJAtC\nkkr4jU8lhQiSlzzMCD5ArSUrvz6r01DlGfMyQs1IXY1WGUEPwWXYwjEv0g02\nm/7U5CsQqFfk58+wiACesOVrvo1+Ty/nY0f1Vmasz6B3l6n4QA82xfMiZWJX\nrx5/\r\n=ZkA3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIApcLVi1VpAyqyDIYHnVjf1OqYssaOt4H4I4jHOjxArdAiBarHYFNRiD+B54PDXwzWB5YdyUX0TCKhoGqNONseZiqg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.3-test.1597150297770_1597150311594_0.3761254557645404"},"_hasShrinkwrap":false},"6.15.3":{"name":"ts-toolbelt","version":"6.15.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"44b2a1abda5c00969686ef48bb4243d3f3b63dd8","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.3","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-enrjNgrlb7IVc8FTtE6LicR+tw+pmhKXljl67BJ+UYfPGqZtJWkLn5S5eV2Vh8affwLJvkKdRb1wilu4DG7YEQ==","shasum":"d9fdf5cc8f08e21c459671386f4e4e0d0d4d624d","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.3.tgz","fileCount":6,"unpackedSize":476653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMpVECRA9TVsSAnZWagAAJlYQAIceDGK+znmXV2lUjUJS\nT0q3KXTX4SN0kHOyyO9mZkQkUm5HrAfAQQKjLw7ZdQqI+FtdijgKAK+7u1qp\noiwnW/6FKEqwTfYZQhg7yI//Mq2kXm7uqNyEenehcbjVBR674YEiTS7yfzkP\ncQ4hdHQpe5y/pac2vmA9D95OU6IPn9Qq0wupgAH1FIaE8yqCywNeAhA0EP/N\n2tkVOkOJyi8xCtaTyo66Sx7Ikcdw7ZFKarwRGladZNjCz0CoCt9fMHYFCy26\nnKeyB9bgValJg6G/GCvIlgh10ohKhFxWmhkuSWbOJFN7XrNmnRGd0fihaWTy\nNJu0We3xsTx/FQId5LMK0bvxplsgDTT//lWQWav2EKw9wlrPX8j4KC1FshkB\nPV9rWTBDXI07NjYKc8giMPg9JgNJDbWKT3KbYtkBo2QIJHhIPiRo1+xTLKec\nGwTIvlHGJ+YYR83dpD13mGiwspRfUA2HN+bC/I6s+kAKNz458d/ncModgTDx\ng7IyuzD/H9/sxo/Om51MSJoaOlCm8h1ij9JeD/ts/8iLfZ1McDfLQosBaM4w\nDUkBAsF4ZwGMW4sCLO4Pz1O7+c24PYvcAzDlxbwGi5TZT6dgGlIqg+2hDLKy\nWz9417LToF9ze7cQUq9FJTiYuDSu7G/bFxPUv4euQVI7z+Vo6GpDIWZ/iaPS\n4txF\r\n=2dzU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFgNcMzafGJoQfEU9deruvm29MEiXADnmUVeY8ji8qbAiEAmGvck76wnWURvaKdrYzK3HIV+4PIKczyEJHOys/mWlA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.3_1597150532346_0.4306265753676657"},"_hasShrinkwrap":false},"6.15.4-test.1597186060009":{"name":"ts-toolbelt","version":"6.15.4-test.1597186060009","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"fea6147d105db5d898523c21552ba4499ce32523","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.4-test.1597186060009","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-S5FZmV1jW1FZWHKNGp74Gfk98w1C1xZJunfM+dtO4DMQOhwn4vqyYYnjx/tKv8gq/79YpZT0CZfipi51GUkEQw==","shasum":"3d38cd45e0089fd3524925743ab6388066691250","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.4-test.1597186060009.tgz","fileCount":6,"unpackedSize":477480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMyAaCRA9TVsSAnZWagAApYgP/RVQMgTXwNIO4ZM3tXCq\nS7B9sN50EKWe+ll1LFUAgCKr51s4eZhGAT9e15aXIWHQgbW/ERlyDQ0GLxOO\nZETugWkXv9o3lYwJTi6A+Ea00bL7pvCjK3xsnJzt3EpGbSjopfZfv+yI/hPD\npRzx5R/r3oIdYFgTfVl9PWpO9Ghn1L4lHuhoTPHVoWCxK4biOlWoQ5fTxp62\nCZekin5xSnV+07HGsODno9r/hJdemrqejCxidxNsz6EeaUNXo1tF4tEKs8r+\nhIzjyK9AETMymNl/non8QMysX7tCgwYtWtGrq/fSaOXhUAqKincZUo15h/oP\nkqKK4aFxS7ra0fkY71BQakmBvBnvkkWwaN6eyMgyyNV7O/bRfj9v9Q3mGwx3\nGbxVS5zlC584wv722BV6SCWunXnbIrKedw1VfigF21ZVCGIVNx/ocdZMH+me\nUzUYWLIVw2WVjFTY/+rFgm29AmYlxmrD0idhDpn13Hn+l0K3b2WVFE6yXggG\nYtEx0+cvepATq61U4U46UzYjZM3mUvkcKAHSeyDQR7EIoB9o5xTUqmDVW01+\nTQVv8EIqgsG0a8SG2ASUcqkFWFZLxIkPtdne1ZR8OEO8aulCKMfMarBU/H7M\nR9Myc+i5F7XLszhb313cOeXgURAJOwAlHgHtpqd163S8Iddwmt4ItdVIJUOU\nqJbr\r\n=rexM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBtLk4gX9jVmRJGBxGf5olYLpuZT5hlN76hr2Anxa0ogIhAJzpG1brOzNB4mqw+0efdGSg5f+ezNR4+ypt3QuKmGej"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.4-test.1597186060009_1597186073725_0.13266464250300425"},"_hasShrinkwrap":false},"6.15.4":{"name":"ts-toolbelt","version":"6.15.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"fea6147d105db5d898523c21552ba4499ce32523","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.4","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ifp2yNo4I8q5UwNARUBMnBiFpv5DEtTbCtS8RCjjLOz+PNcThbjUsPJCK3hRnz0dTygM1Fi3Mgvnt/DoKUTU2g==","shasum":"f7fad584e197d0f495f77b5e3ee75a8f4c4dd3da","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.4.tgz","fileCount":6,"unpackedSize":477461,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMyDpCRA9TVsSAnZWagAAt5wP/0S4oUuuAMLWI1PDRGwQ\nTbjU0M/IbQRxUrVXRBcBcGVEP/lUWVVUAPIfd9Ct7WApdkvdq0vr/LHCjbtf\nIzf+6udRAzJCWM8vSvubpvzH+fWxC7I/a8ylhoB5Ioa9423id4h31ONUZtqL\n6K8c0MVWwOoj90yniA0jU1AMDcvrdY22h6ryBTND2fNfsYO8P2lxyNNIRmzb\np1iG9lEWYHZC1oMQ/KjnaGTIohrim6M+MbSqrjw+v4yNFaXwHApKiQbTIl31\nJzmbOS51HcAsbsO0vjtqHn1TcW8k6AfKYJGsa/6eEgaI5ETgKkww6bMaJJb1\n7CWgcnJGCQwtPyjYyag6coLPi3zuvFezNVI8NbfZeqkmbsjSN2ffitits7cN\nkPlpMIOrlSjSQNBUQ7QEtg/1QgUKwDBvTs5mtDoUWa9GBM0r47uUMMGC8VnR\nmsAMyxLIqULygc8dxKy5d8la9TSU3103slwuqE0Z/H4bHmli07jn1VwqOMKS\n0PQtv+fnZuKunsLpAdj7VhAREPkLs+mWYnsBr8+tIwfrPU7XDb7BzeJAD2iy\nMBq2oU9t+Nj8/CzGEf6JTrwW8S5DduHBPQhXQLj6cYu7kPcCnfzCGAQ6u1/k\n0FUHtPYBFjhJJ0iGJQdS4Hj7ywh1nelEKvwHLPIE3xzwE3xacASxdhHp1XGp\nNe0w\r\n=brg7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFeYSwhiVDlet7NIbk96f1aipsdJIDZmxlUGsROH9xzGAiEA6KEa3A6cMm5CSp2+wH0eIw4+x9QS7nbvxalFAtVaKFA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.4_1597186280676_0.5618564152691197"},"_hasShrinkwrap":false},"6.15.5-test.1597333971616":{"name":"ts-toolbelt","version":"6.15.5-test.1597333971616","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"a535da730964af8313eb68c6cdeff930afc2ef19","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.5-test.1597333971616","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tQJoiX134W5HFugSAngq+eXWrcZjGyruD1QyizMSEsrltRNMdx7WQ8BC4RSJXkYGprB1JbMNmmeDjaXatKI4+w==","shasum":"3855212d6b9f757bdd90aeecc7392104c4e4624b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5-test.1597333971616.tgz","fileCount":6,"unpackedSize":485115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNWHhCRA9TVsSAnZWagAARxQP/RGB1O4EVAt13BmWuujY\na3GBAdXYf3ZPginbJFgshpsm3irJIvZm6ATew1fn76X/KTTjMld+Ut5KP2mP\nv4kvsODaoubLvIUU1AHtpmR0bRBRvDsxAXj5OkVqAsgXaVrwwA7d51VOrH0a\nn1+ANgIB2hrCZ8l+MecSvpXq5KXMswRQJY2QZjnyRtPxXT/2Mly7xKW9UdTe\no4ShxDJXT4i+XVcco0L+wqBnz/3wRLgWnLwryDTvtvMr+bb0CFJvGD345XwK\n7a8YeN5VJpjfgi+5V6V91kKmkapaTlLPHklyHBPsf4GjG0pLi0EggJTM1tHn\nHAFcodAJ+RbGcoAdnq9J1wYVLSyv2NtQH0nxeK3Eneg+D0NdkOvp0Yo9ergM\nSAmSRipJGAn2x7M9qaA8NGdwD2mZZBP0dawG19LZqsLV7SDfVD2e1ty5ORNZ\niTfNSh3F8eSIhAicfc8p/+0z8Glot5j4/HIJ7giwKc4SEMt0xpCbwd5N0FXW\njuCZF6yUuF92/SbugDwcwvGXTm3zIe+DMc6jERMK9cQxV2atJv6S7B1NYeyH\nBcVYnQf8GnD9lm91MiZEu/2Muf91k2NQNXA79zST/WQ6BJG64YL5ua7Fc4Em\nXc92F6mXAdtfMfp3bo+l4jkyjEgkFU12TaSsPW9sZ8ijO+/2FkblbZy6IVA5\n/MQA\r\n=JhLC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1PKUGuJ0qyDkuB8Fmqy5e7RL0RTvk75gkQQB876jXJgIhAI5jjndm3J04hd663A2Q2GdTjUPixyqk0UH7aoumXCqX"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.5-test.1597333971616_1597333984955_0.9053771845650351"},"_hasShrinkwrap":false},"6.15.5":{"name":"ts-toolbelt","version":"6.15.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"a535da730964af8313eb68c6cdeff930afc2ef19","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@6.15.5","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==","shasum":"cb3b43ed725cb63644782c64fbcad7d8f28c0a83","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz","fileCount":6,"unpackedSize":485096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNWKsCRA9TVsSAnZWagAAF18P/A0UANY47GFR6queLJyR\nFJBHvpDmJM0IvCs1ppGI8Qo4yE40pRIVA9LeMnejqvEN4hk41REC0cwgPA9k\ngUNZARRkTC6HIhNOg9MvQH7KgCyLhKDAEVmuCwuocZy8PpOaZn59KCDyCH1i\nphQBS/LwpgJpPVURS6ppMyWKugPn233M/dQJLTzkXMDfjYVMiaJhTSHTY0Nb\nyorlaK2bIcVWV2piAfIpXHPi9MphOCLDOM2Tbr9JNRBzWgEOAY/nA76CpjEv\nhQKC+dUR90NoDbsMaTa+DVK6wP5Jy128GA0su93bACrry9WBlsgls/tFcOgO\noanONlp6w895v/4Yu05YSAdKF7b56GWVNmmmH/HGWoAEwa40lYfB9TEyvYs7\nZW2IWVjA0AppUqWdOlYsZEhrQj4uLKGxRl0WFLRDzvanx7WQDGnJEzoWr12e\nCKi3eDiDDKs9kgj+4NUQ9dp81jy1MpK9CI2SopnlgZ2itflW+pVRQ5cGnQbs\ntAESg3uJs6imAbZkGHHoreo9uSeZwh4IqxbCR6jKv31gVNh/o5VGvFIijE7j\nJX+tDwJ4zo7IhKoo3F3z7CaO8S16ULaLIt50tuS4E8+YWNTgLAxGrmpOtp7M\nSUdGOvcG2LvW8+6ygOTvi4jAzjcDRHYr+yov0FnhQtNB2htOs8kxy7xYVjnU\nqJcr\r\n=6sNC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpPK1A1wqm/d0lmdz03HWBmisFcC7PHakQrAtFjIAB8wIgY9U2kDkPJXU59Mvef6a8I/qBV5tvlQecCJVq6OzgzkA="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_6.15.5_1597334188112_0.9662332709304071"},"_hasShrinkwrap":false},"7.0.7-test.1598198094424":{"name":"ts-toolbelt","version":"7.0.7-test.1598198094424","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.0.0","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"7272559171a1acaa085671b1fef69dae6f00bc7a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@7.0.7-test.1598198094424","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RTeNFnhZlmDYeDSGwE6kgGm84ZaMSCZgTFXAuDR9OQfJDDgKbi/HI6bJ+cn8UEYggPf1+BaJpOZlvSV5vXiplw==","shasum":"f8da6d7e2eb97ff3aea4e02f43592ae99d31d91a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-7.0.7-test.1598198094424.tgz","fileCount":6,"unpackedSize":490292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQpFbCRA9TVsSAnZWagAAXgwP/RzoSFml1ix1jnY6pcTJ\n1SZ+kX9GxY/B+SZ4VZoTlF71uq7jYBQujM3TF4vQIQg0OCUzS/CgGpYp1DmF\nlKVPs3GanBF2EEyH8H5+YyZFn+jvjtvCPy5LAB8VjaLEUpSzmCWr9+sCG1FP\nZwW7fanUFXaltkQf5O3iRiBzGugeko1f7mxoh6RjaT7uCscfFVsZyIPD8NHO\nNVWG8HnTHm/dAerUk1OHgufVmx5nMLsPxFbuucNqEo2f1AXnJ58fGE+jeBKD\nHEQbbw921YB0r1M+4ZeVJXJrlzMW5uKz0/gs9nirv6MjngzNjesZkdTl7IJG\n7oRgeGBdnA+bLJxZjIUZDj5TlR7iyCm8Hong7l6ENMb+/gOzoTbi2tOiiN+i\nxC4Bj1AfhGxstEAFxT4JnmF2icddWhI4pepTbagrNfXHIZblgPJ8nz//fyAD\nrYQhy1OrzXpVLHYQrKmZWemuX5Nt89lcMTUAqz/P8eG00N2eeqq6hIAbaadE\nMeMe+aR096Sy5qjQ0f8ISvtWuNhGDekE7XHrKHcvIFqk7hxtMppyMycNe/f1\nJtTEuJ2dEeMAPCpPf1KkB6PFr2565rgZOk6Krd6s5znZZ6UtBuiaux8OT2Sa\nH/NQRXPIZePtfzdLBlLv7tm2K3yGK/6YC7Ek2n0bvdEKJUEl+66GlejEpT1d\neZ+j\r\n=EcES\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGGHFjJqx5KCqZhFSa8t/W4L4LWL8N4WPBy/5ys01gWgIhAOfULxNcn58K+OQcgsy0hOw6NqQ7Y/ByyV86ZI191GDa"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_7.0.7-test.1598198094424_1598198106999_0.8864762583756443"},"_hasShrinkwrap":false},"8.0.1-test.1598221305258":{"name":"ts-toolbelt","version":"8.0.1-test.1598221305258","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"b1d5a2a345da1821c9fee0566ecc79e016fff586","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.1-test.1598221305258","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1wp0zSHBavw9XEsPhj9QP43ahVRJP8ie8TOuXDEZ4GBhmvhnapuW8vRg/oYzRhzso9LeA7hYZPv48siXnrRx7Q==","shasum":"327e7f29f8b237b05690fe77aa891aa56380f1b6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.1-test.1598221305258.tgz","fileCount":6,"unpackedSize":490679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQuwHCRA9TVsSAnZWagAAi7kP/2HSUJnT2iG4S6p196cX\nBzHLaOttDIgSnvOw2Ca5Kh51UHRJHeOQe9x/46l85w5xP9nxG4cI6jqsvQy0\nvhxy8RGoipOVopFQ7OGbHSx/ctYGaaqzQ6dmuv7+5lGuVwammhjgnzAH5UnH\ng5/GoAaBR1U1RlqwrV172LzTtsDKs3CfVazfkKy/CHRG8Bi/7apRmy9D5NCs\nfkjDLNnZ9PmqsFlh7Q8qz9gzuKHaDMHbbzt2E2kRYDXQKHuFtXJPsN3JpT9M\nGW6eOvBaMlpUbN7MvcU/x7eRAWEw4kx5o33LnmGTu7vDwRddjmoHJqSzY7Nf\nyNG0NYdWuYflGE1lP6m//pDVfg/0/mhQadtRhKA33dxAG7KXVnDHZXWqHtAC\neFtYJK9Gni70enf0nji0vgql/8v6tE5Ms0jWjgqa1BODlp08VE0rImXwMsKZ\nCmBaR+X9db26tqxSNsmvNBNrnFJB8PMfADMkHGA9lItUYe+Vi0mBKYtl9KTF\nkCcb7sWOCpshwBiRTZO5FV1sIBqoZCg0LOl3bnwCzoYdPhOPCjrCcYKip/Eh\nZDHTRXrz4+jKsIpX4cPGPdRKwG5K97g8zteeGgixRsi2WzrXHDeSfUXJnIv0\nBXbfaiG1mpbOiwEicui6WCrPg+O4B+h8j3JyNiHuov8m7BLqgTGYh29KGEO1\nY2ld\r\n=PllQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3O3OCgheBHt3bh7RiD4JiStYoNPcdLg/sHSGasVvw3AIgOPaiMUXtosAD1jBNn0WPFEBNZfzCPk+blVQWHvZGkeM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.1-test.1598221305258_1598221319232_0.38938716823564024"},"_hasShrinkwrap":false},"8.0.2-test.1598221481550":{"name":"ts-toolbelt","version":"8.0.2-test.1598221481550","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"03aa8c6d1805c174305532c8b9c265f6e6bfe97b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.2-test.1598221481550","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-EnTkQar/D4TCYaQ79RNUWYJEJslmeXy9Gnq1wJasjhyylKcVx2oz+NTgvbZTFORJ2ictNtsdhwXFCZJ25XOzfg==","shasum":"04ead87aca147fcf82395db26c3fd0cb6283ff9c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.2-test.1598221481550.tgz","fileCount":6,"unpackedSize":490900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQuy3CRA9TVsSAnZWagAAiAcQAIUT8qlf8k+cA/8NlpMk\n470ahqBbKdVossPKKJD3H5QjKsWTYYMImTM3doGPwDS8ngh9BRyjJo0ub+o7\n0n0YX+nc5dISpihXiVOLgxACcg0RR3Y6xPIAKQ/pcMiTjer0ZMxXmCZ0LTJQ\n/zg8ibBrv2AEc7+JAgr99b1fKI6BwZuYy8XkLDPPkZhqDbqyjhrPcwwROds4\nYGOGekw6K46hwa0Zyy2VbMA0ZsFD45OQooecH83OsgXQ/pMFv9BAOvatnsJR\nnUB2Lq3SNf4/liC2a7ySROhOZfoMougE3e2qQ5LXgiOXGiR37mFQekhfjQYO\nV4db8bIFpX1U5Wcou0mzpy1cZT+W86Jf8KS/3dDUoRwi1vaCPoCNiWNZ03Ij\nopWerrrvMSYlimavVzQu4P9s1/nVAp3YypUZeKyTLbZR65WBnQGnfaYHJrsj\napdkjnHbhQq5lS/enxub/NrKnqPX+J6w1ZOvvuc4C06qWe6Ut5mUQ+dTq4VX\nCt5v1ugHF0BFcFdltdeMlN42K1P8xph7qPN+LWPX2k3Dit++kC4bxysTLfJx\nBCHaXsbTcjMmS7kqYsgLCOwfg/ZDQqzTY3O7LF3NgudtFGU8QICOspAooPY7\n4bhcQzbBW3CsyXBeWyxknEo7q+xsz5fGMQlDnSMjsPVJts0+/ZgADyhnQtpH\nfj3T\r\n=anLf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfD69eNVEj4hTLX4mpa38lTd8XTCA5GZS7BEC/Daz+4AiAQRg2pSh96iZCaZq+Nvo12oMggxjnMDfb1skN1eoaQCA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.2-test.1598221481550_1598221494691_0.8460050797599996"},"_hasShrinkwrap":false},"8.0.2":{"name":"ts-toolbelt","version":"8.0.2","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"03aa8c6d1805c174305532c8b9c265f6e6bfe97b","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.2","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-aQQq2lwPWLDy7qFoDZ/pZLQodBTerW22vILpcyFBqLwqLRp7FkAhm0HhdODpIouEQ2CLmwKYJIzU9Pq2RvgkOw==","shasum":"ae34ac6456a9a95bb6278e03970756379efff838","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.2.tgz","fileCount":6,"unpackedSize":490881,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQu0JCRA9TVsSAnZWagAAYv8P/A4D8mH9WbqJ9EX6u2lk\nIQK5ws8XPhoPOxvaw8f8Vy80hQGj9i8F9y58ZjfsDWsw4iOSjzwEv/MEq+vB\nBppemWOkIU2lmnckfgQi9GwH3yHL80MUyj9XB3VAsBwIYd0E7jPDpZekQFle\nJTb4dMBXrOJ7s/RHp7dao9O/W+1r9GWjcu0OprxlJcHGHoOu3G+C3XkTCwUi\nlWkgrMuO2UEFLfZxfMLzd+KTNchG9zf2+VyIPpG4O1eqTZ7n4wczimFztB5H\nbrhaKojFUIFM0HzyYVHlDHOGbmiwKSbCln3hrvNdNNqrikiZVMABTL6ep+sW\nUiArvxO9GS95iLJ5lI1upF+akO5XXxmv2OqOjIKbuBscBXFEvh3pC7POdIjS\nP6/XS+kR/d5qSGgiGVdkLEt6Nx3QKWi+c30eZU9bTAEi0SSQhNfHZSF+J8uX\n4+s9PhJwIGNXWBCB3mb0Us7aoc7mdrxkv4QUr+vrsU79bFsSDV5wDLjipiVn\n2xSXvmhQIjQDnX4f8jLA/bfC9RfoxxFl8qOgJU7wwk26RKGdbaK3lWSZjEgz\n//GWAEJNPgPXmOiOuZxNu5Kr8hYdeVZONRDgQfQJ4KKwJeM9tHNeoFPJBgel\nYVFm5c/UetSmcYhfH0D5bDzsX251IA4G7WMHi66ZwGtdE86Or3buEjiSidVX\noq0X\r\n=KTb0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGTAc5tnHAytpsj1FkfEs7Rgx48Xs1TaOCY4COsL7qT/AiBD3fuqPZyV3AUHtsd2AvwhocvpUULxsos2L9iK/OERoA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.2_1598221576761_0.47106455186732665"},"_hasShrinkwrap":false},"8.0.3-test.1598221567052":{"name":"ts-toolbelt","version":"8.0.3-test.1598221567052","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"3d4544e1e66fed530e1443d7b67be616c2f26440","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.3-test.1598221567052","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kjDKdjWtL1NWKCc+vIti3oVulKPh7ygmh2Jb9DTEFSRaiTww4fThicle3JCgT90YPerQkg6wBtPGwCfnC6PFuQ==","shasum":"4334295f5866500e7a683515a413b9f41f4751f2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.3-test.1598221567052.tgz","fileCount":6,"unpackedSize":491130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQu0aCRA9TVsSAnZWagAAueoP/0MJ56q2ReMYtZADEJZl\nqo731SFp61izOzkwX2QNMawqlzcGB6qzakBcnK9n9ls5lbotbdwWOE76UEBR\nbJwOYnRMzwTCNJZPrC5bDtSa0iz1q4KzPaggmoCmRNeACIundQkaii0xX+Cl\nvDaCuBhsus0s9Ik0wjCR0N3e7hkYTV1RfPphO/Nv3TiDUlQs9bqpjOWMCHQy\nKXs8iSd4HtIC8467EU1L9v7pmFQRgqA6YdD/GG+4PvQGIWVtwuidGcQJwegt\n4RsMV0HKuhLO20UHJdz7UAN4u5GMdu5ZYk+md66e4SJWoPuls6xi66ZUWBVM\nqw9qv9+Ls5cMuroNsXRpu5OoQ3LFjofSOcw/4lOeNAJkMoEmq3IuhVgh+Qlq\nrKHpCx+IGaSNyeYAMQ+5DGa3UWkEA4+f7vInl+rDqJVYgcmzj78vhXVol/bA\nWQe7X+SXamNi47RMEIBapgpQa5tdxOwshW+cW7fM5WyCAAPiFFuvPCalAgfi\np33Ao1E1NkSbnwd+65kM2qZt3NDwz7fqzW1qM4Rq0jVGzsJ9cf7IVhv4BYzz\nZQepoiLu931i/u1xAE/smnPi5X3mvM/FYGxHiWofv2dd2RZhRaTkkmAMFVdU\nF96F8qAe81AJmPmSRtoyMVvFpNAmGDw2+0xclUMemL+eeayIhrkAxHafgPoL\nQZQm\r\n=zfqB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG16uL/jUAZVH2vQwhGPI36CuQM48TEALqV/N27WlXKEAiEAnptREERgxKe+dR4tRENM0+LrfyDNhUMXPA+2iHB9cAc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.3-test.1598221567052_1598221594190_0.5346397663512699"},"_hasShrinkwrap":false},"8.0.3":{"name":"ts-toolbelt","version":"8.0.3","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"3d4544e1e66fed530e1443d7b67be616c2f26440","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.3","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-gxgyIVxf5B1ToZfA4cojFS3h2jPSxYWjvKehkuCVejMdnATeBdxY0tqCSr3okkwfSA3V5TBoWeYGVfLpMBfSMA==","shasum":"d4136466dfb731e8ad1f890303dae176beb27710","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.3.tgz","fileCount":6,"unpackedSize":491111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQu1vCRA9TVsSAnZWagAAobsP/0ERrQtjtOCf11TLbXWi\nZOSQABJGNYN3ryA88x0HmBNW9+QWdu1u5kGKUa+zXxnHwi977wPIN08bStj8\nXN6w4C4z4JmWoZFIcsz1ZdmHEz+U+IJx8pwI8TPMVDtIM8Qkxb4rMDNFA0lL\n5hpa7yqAsVeL6r+dCywg8QC67iqFE6C9MUn9GZrWDryXKSBpkIsAgBoa5/aE\nkrFl7YJFsHah9GRUGmIOVbs7R3mtX+5OX9ssViYYPQcCDVrdw2DYRWBI/U0s\nl2LzfmWPj1kTwsb8+sea3KaIuUviCzD3rexX3kuUPZPD46hoo8ubVZdw1Xv+\nLWdH1ZE9xAgPe7znnJrLr4BsXbSln17hw7GUXDw8Se+XQMPSlPpYEWfAdRgw\nsWrVfR8QHk51UiCR8VnYqB+OXyrddFBMR2za/QX9lnMpCD3RRk30FEu5lL6B\nueaI2KsjUkGdHNew0FT/ZhxZAJn8fZeF2oj5Pwgi7Ln0veF9KhGTX7FU+hpq\nVb0EHlKC53F9Rz0Jp+2x8ll8786eSSX3U3mL058cNQQoCLzX6cBjklBkyhZ+\nLWb+Z+NMWsrw9/bvi2T7vnsqr/Mb5nNj4NNyLwJ9RCF2ATTTBh4SBb4624HJ\nAq4OgliEcM5Sca7Q6pEj4TMzAN4SaHaP6mVwP+WCwgDOUP7DLZFOqQIiXiHi\nm/Uq\r\n=c9x+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBCincz23OlHo9UTPsKj5wl1xA9mpRGICpzCl0r98DPGAiEAxIAKHu0P1oXsLrEa4NYX9CCG4IR8TojEdDN1VT0pIRE="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.3_1598221678558_0.1782855972706494"},"_hasShrinkwrap":false},"8.0.4-test.1598738192590":{"name":"ts-toolbelt","version":"8.0.4-test.1598738192590","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"18fc0312a6fc5cd7efd1d7d86712c75d48490e2f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.4-test.1598738192590","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-OBcXnD5h3OGDjOFpY0XDCF8+cbEn+LO+GCHH0uj3dwMWaWG9+QCpKQjpN/dsYCg8xhVzjwh0c5ROYU3pOCq/Yw==","shasum":"3fb73f4b889bf1656cfd44430892787a8629b9d5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.4-test.1598738192590.tgz","fileCount":6,"unpackedSize":491994,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSs8fCRA9TVsSAnZWagAAvvMP/03bOygmw6nZJOCMGChq\nKS0rbTZovLoUdtCu0YuDsnJL0Q3O/O7a+JXexG/bgg0N7oeRu6b0N2j6Kd+J\neibC4TpautkjDMBpJa6FZvPKSBBGBPlKH7bz2nH3qH3LT0AGn1iKq5sxu/Gl\nkm0k+zU8A4w1XtcXM6zUbggcYXuWFWGO3LcJ4A5G8Y6jsdIiC73oCMpR1jHE\nmK78gqkGgjdvvenFXBxRREu91She8Uqy5XapOEP8jxwCD4xM5+WHWI9z5LkF\nHmf8a7xqv3/0b7Qt+AZRcJ8/xQxghbrTSCOw/FDuxHFmwFvzrlrKZnE8mkFb\nBxCHTByLUHwrN4tBN1mQvr9C9awUdsEeJZHuPa2KpZk4XYrdaPfwk14D0Fmx\nmwFv8b7UTjXQ6goWKcaVe2iLFibxF9KgFfIzsyLqc8iDasdlaEEAy795kx5J\n1KCLPa1sE21vPqbHQjSlpLPZ+WGP4aMdpTIFDnXgg6Vtv6zOT5dheq76kUvO\nCG28tfB+N+6UxcseAPJNDpwgwv/cI6efMc9YEnqfehrvxZhroRRN18BenV21\niY08fGLEbgZaq1uuBrbmXQg4YRiDePvAuSLkqESbXp2IkY0FORbx27IhD+MC\ns3AvitktVh4bSfiB7oc6jbXlCL2N6Eo1X/0DbCryvrjvEaY1HRX5e1QGQQtP\nTHfz\r\n=w8ZT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGQzIEKktlBsfUYHLT3GwF1NUgrBazY/SDkU9umC1ODxAiBBQYUzp8ZsO/jIME1YLpkerDF2ERA+mPW0WOPBHMjJfg=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.4-test.1598738192590_1598738206524_0.47133199004919346"},"_hasShrinkwrap":false},"8.0.4":{"name":"ts-toolbelt","version":"8.0.4","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"18fc0312a6fc5cd7efd1d7d86712c75d48490e2f","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.4","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ug9shEyrhblB0mmVtFO6ZMdsKhFzjSmSVJJ24DRbTy3s4zrraEvQnE4sYvcVVszoSfQGHqOnWQMlse+b4U6yGA==","shasum":"db2f4a9b6e69d46a8c99e12c8ff63043b7f2bbf1","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.4.tgz","fileCount":6,"unpackedSize":491975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSs9yCRA9TVsSAnZWagAAxeoP/Rc/i+blodVhrynGs4RZ\n0KxW3163b4cp4QgnvafQWNxvnfT6vyONuZl6jTqEDpBU5qbrnctzdvRY6DKG\nb4qCiqHL8+Zx2PBTbL/1Ld+OaZHTs7BVTnGXo9/0s7Cpye7PvSEjAwRlKzEx\nCQEeveoCT8yaISWCVY7w/MFFh3U/5TRPXvwdU7juOnbPyvnSa6Z8p/a+wLMp\nGiiGFx0bfcnRiwpD4t6LRPgfVLe202VpMF8a002VG1kW+rHAB5H3yBi92DkF\nBBdvYR1M+172AijavDdIDAlgXQ/YQIJHy/KCRWgSprZD3V6R9WHt/KiSq4L1\n6aBZxOq48KWU8RQ7DsNi2gQ6yzDoGpitggv3YvtETRP2EfNS3ScGG+rVQtwJ\neWSbfaA74o9ygmgczZyhXS32JHEUzmm5Jq0KhvNxXkzUv+p4HptYqMLXYVy/\nnHR4MwzG8buIKV82glvX4UmTBu4WGki4/faaQeRcdOZJzc14Yswml/2U5PX6\n/Ab15kSAjdTbEZTaQt8/ypIA8qu59EvEbItzCTBR83NCrlWyCAeIpOjNKsmd\nSpH6YdGGuyH7c1dqapWM77Kbw6pDcqSakIX1oE1iv4quhQ3KD6/9AHtzyNwG\nxoLutOB86gZLk8D2qEUZoitkH8rDH3d7KPMD/nwZX4PuTXFudxo1ehn4JmSf\nhAoG\r\n=ZCek\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHRpay0OaBEFrubIfrZen23pP/qkRwpkv1sNiWqXSk2aAiEA2NzDqL4ReZXyAQ8PKAyGMqk2rMag494SbBkD1Fkf12E="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.4_1598738290340_0.008471532520466951"},"_hasShrinkwrap":false},"8.0.4-test.1599909185897":{"name":"ts-toolbelt","version":"8.0.4-test.1599909185897","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"be381423a520c890edcd78b894184d8f7dc52eab","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.4-test.1599909185897","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-crvfQNY+TIvjOoBLQ4MOAyQASj6tKANnHosaT51/vtI2w5mk1Gl8+U+BK2qFUzsQXsHuidhyBBc3L8mqcqqALg==","shasum":"bc62554873d98050286914f9e38f221769c3ea9a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.4-test.1599909185897.tgz","fileCount":6,"unpackedSize":488435,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXK1PCRA9TVsSAnZWagAAAFUQAJe5nSakDA8JK8H3YA/7\nWavc1N/14G5nz966QyLf1dEaD8X8EihTxiuz9Y9vNkXhdyE8wAZ2nd+R+Ayq\nBdOnFtivQf5WiSY3pu4smG7H75hRhZp0kDTEgL5ai2K/BGedZXIy5Jy7Zfo/\nAwgnSGYMK/pSEgGvXC1tyBVkluzSiggnqZIvPmiERpZJpfTlEb6XN3bw76sX\nuK82Nbk2Qhfm0kjBM2Baj5hY+3C1fNw737zqG8pGYHe1aK8shtm5bByMEe0M\nOczXTOuqfGpZrnJddkBQ2niVQFJBlPQGxOa9Avyn5uv6BGZMSBAgRLa/WSK6\n9q6mTUY8uK6jOOHreaG1uXPyY5JZlVJXrpJlOWjNgXZcM1RdHrmw/QSV+N9E\n4y+MFTNZUDgT7gdjM7kzAsNnZu9sHQFqf+EYTUs1IeH0Qby8qdFEDKJ/qL6D\nd+zlXvGc4GOT8HCtPO4RQgSnQO3MKFrlwvz2yxveEvlLtrBlXZQlu1tmds6f\nkJ3VfuUADe0xFQNL6VwzlI9WtF28xsYOfYWkE6vGrJLw6hFLNSfjUT/Mzhbn\nPwzNA3HkgOhEMa7V9DnYX4QlIL3sQypKk1ItrY7hvfz5j/Mt434sAfoTsigN\nf7iNe2F57IG0lUw2ImTSRiK8Bgr1xWHyuCf/yvT6q/opGsYMeFXMD2q4CbS0\nFfhp\r\n=VrLU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDfI+QlpMjXBAhW0221D/JN6J8yQHk3flCu1q1lWQfOEAiAGVZwDxrVlkLR7frg5dfAk4iqhW5Ql5vonMzIkXR58hQ=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.4-test.1599909185897_1599909199026_0.7793000106760102"},"_hasShrinkwrap":false},"8.0.5-test.1599909256966":{"name":"ts-toolbelt","version":"8.0.5-test.1599909256966","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"3859d1819021800b96ed815abf5c300eb7b8f926","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.5-test.1599909256966","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-xuqc1OLIatbAU91v+SGngtOqEv8UNEz4YDRQs3L2MmmM8zanbFKpx+MkyzNEyHhb0HZnJZjMfjt1rXcxyU9Mqw==","shasum":"aa782e7218bca294610c1c53a3514c41e2b742e0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.5-test.1599909256966.tgz","fileCount":6,"unpackedSize":489630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXK2VCRA9TVsSAnZWagAAFBcP+gMPPyBm8TSpYXoeO7kn\n7fynO0nItmBLOLey09gLdfLG47kqb9o7t0BhZk3D9LzuL3a0TEgbJpS621xM\n/qNEFq25SJygvBAQCS43rgaLO23u30p+Bz7sk0NnHFb0kVRsNBNYBB7XyQNI\nLsmMSYsTLD/nvxwisZnEGoN8GFcO/Rw1MChPB7Fa4BIo1yDHtNXYNMCIV75j\nOcsE6Law84a+A3/4Ajd+IstENYH6R9np7tS5LnQRRK2e1tqGwDYhKNoRVZOe\neso+qjCJBmPvUb7L2f8FjSAT0VS1Ij1UJUMxZu5TW/jzd9W93LBkdofeo1nt\nnPP1feCgvDcZxuE/7HNAVWVKLhn9p/jCAJRMgFPA3E7o5ApHL9/l8argR2//\nkDhjeTcqz055tUj1/pJ4avGOaqt8YeeXSihWX2N2DS6YwiPvyBA5FD47UQ8W\nD0vbPxUlaDgDYLUCiBtDmQqUOX62YzwG1U/9Hr6CP7jRN29stcwAMMub/Une\nVKA2hvUIm4u3Q9gImS2XHsxzlj58b0VnPzzPn9ZislqFm93P3mPA+sdi4MZ1\nzG9+VAxH+Z5dLuywMsOYFLC1JpLhBaNVT3QLla7jhrCFchvJ7W5WnV9qfzU3\nS4FxZgNG4zw94d8fhKJX+WharzM0oP1XE8f0TkkeFVmAIPeS/av/PwKEWu7e\n2bzh\r\n=zyii\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEuSW0nz/nKILSiH6WflDEzLQjkN19ImjkXl3jDMLH8AAiBQ4XLNnyvXCtyKlkwGKw98JCH5OPTwKL7hvrOXTPZJfA=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.5-test.1599909256966_1599909269310_0.20712767943860744"},"_hasShrinkwrap":false},"8.0.5":{"name":"ts-toolbelt","version":"8.0.5","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"3859d1819021800b96ed815abf5c300eb7b8f926","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.5","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-BqG4vzQZDcjXHMcVMcWdkGLRzk68iHupTrkHnNAN/tmrD7pU2+EJXAg/1tKwTNcAU8wsH8W4pOCvJcHQG6Ptqg==","shasum":"85602e9f185d6c7fa0fd4ed9eec001d4f137b675","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.5.tgz","fileCount":6,"unpackedSize":489611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXK3rCRA9TVsSAnZWagAAc8kP/3X/+hA4l4nCDlNwPVct\nLlIYkAckXARqmi9uaXoX/tV0gFGt2TKS7yQEgweinyD7onhAIXVBk3kz9Tx1\n5mDi0w60+mRprMZNvMLnlHwySCVXD1pEcFRhLRSI9VsaH2RzKtG1eOGkP/n6\nf/r59rJmEbZ+MGZcNhZq9rVlIIzEW3mhfL/e3dZEQJ+aIVH7OFSIaCBowQ6F\nYtlltYaics2zrTfXUowTBU5Vx4/OavG0EXhtFw4bJmdl96R7qWyrV6lcsPrm\nQ6jPyie3ZcOKNwYT66k7QewaZpFlspa9v1DbcZEGFK7YWsBtKqDXITyJT22r\nlenKeir4f8ug4icMqmh+pIiUuTW+mG8zABktM7troufs3Zn6mo7ZTkTyDJuB\nYNf65C7NjMKP+6HTtY29zGT+gt584exxL0b6yIcB501hv41/yT+PterlW+pX\n+KqSQpKrzaumx71nhzcMD2ZSsOwlYJB3TuYBOHg75fSVfnJnruL/EpZPs3pI\n/j4BKKdC9kDMjvyvYonWG8aLXnmzHlJoSAyg18c+PYt0SYG76orubfZG6z1Z\nnV0H1ZLZ1TtiCdxaRDuWdENFvzT+H0bLJMCmwN8PAtO/IcQT1b53q+yKOH2f\nEPUUkKmmTIiB7A5uPD9Hk2gl1847VeeI81HREkxTwPWihGsT6TjiG66QXAFP\nTwts\r\n=SCkl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4Rt9mAcNrvtsCo8o6Thm1+jPEJr1iqN9+g3azRdRExAiEA+xU68nPHlFB7GP+4SQNhoKEneBXRvUemdt6UCOiLTuw="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.5_1599909355449_0.2510141701370807"},"_hasShrinkwrap":false},"8.0.6-test.1600123160967":{"name":"ts-toolbelt","version":"8.0.6-test.1600123160967","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"94ae2f12be155e8d9efc7328116016384910b271","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.6-test.1600123160967","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6MXFQgi95KVe7qeHt6xYPfAEWo80wH1FDAixrr8N5AyAvAdld4P5wSgpU5gDULpV1eexncF0VZTAQJNOQi+2+A==","shasum":"507eda4f415b594ab71c46013f79fc8e0636c357","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.6-test.1600123160967.tgz","fileCount":6,"unpackedSize":491415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX/EmCRA9TVsSAnZWagAA1YYP/A8ITvW0H5qIXY+0D2Wv\niQRPFmDVoEBhC3SQ6IP+LtBovK468aPrzDPc7zSDy7HKDOpTvOgmrVbxXXVq\nl/u7DlMx7KdYxqcSGPwHG+2QQ/2yF28V/y64LlDB+uQF/ec6jH1C8RK9vs+H\nN7BRdhioSdd9RL+ghsWWRrDWw3fhRsxyXAp0lg3iqye11jrUY12dyZlNdsp6\nHCj7ml3hQmPvSzFCZmklPlgU1suW+aqQHJkQ0L9HLHdJMurerq+XDvRl8lFn\ns0+j0T/8snlPGjHkRgtSCFAAoxNsBgtJvlRTBkhpfN0DchL5LaflcroXaVbK\nJ6NMAetrOS0BVG/UeHo6rjW/yteKS0gjjvigPAKZsGF41B3SR8oABlt92ZrW\n3sn0Dv5vnQ0RBHb+W8N4DnLyOeWaS6AT9h7GdgDPNNhA+LrE+1JllY0eH8iH\nR9IX4b3Yh6wQEs+koqUMaaTP/gfT90YevJeiUwHvp3B6XysM1W7+XPz/VPJv\nO17Xj0hGAabAL+yonghtPXjiAxkl6nwUvv1Oie6+ZlcuuXRzv6vP8oDX3mID\nuV2ttKz/QJ5jv4LX4QRFk0NeNAb+7WG/gXGBxkKY7PFBwfG2TZqSUTbF0s0A\nqU32EjRsQaN1eI+u34W100pEHjAkwZXpxVccmdXA8fPHIQcj4nFh/4fYfTR7\n6FMF\r\n=J4BD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFIT4ttTBJOpEym4DtRhZE+wsJPF43OzSPtSLVBQJoVwIgRIP3aTBtQZQ1W38bnAEnwgKoLo+dKt52o4KWENB+ABM="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.6-test.1600123160967_1600123173663_0.07082047817029391"},"_hasShrinkwrap":false},"8.0.6":{"name":"ts-toolbelt","version":"8.0.6","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"94ae2f12be155e8d9efc7328116016384910b271","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.6","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-yfWBnQN2NVuNb/T3+RkbfdJiTAIJE8Hgft0L5H9zW7v+Be7sH1D1p8ReUUZt64/BiVw4Vjsbhcx294NBhj2PqA==","shasum":"2fb7d5978d0c7a8e19d1e6fdc75003390960ee07","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.6.tgz","fileCount":6,"unpackedSize":491396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX/GSCRA9TVsSAnZWagAAIBgP/0uVADF9ykSB4wdVtUlF\n7IgdlewRQqrhcLn5pMCbbiMtjpBp6QJSeWX+mVJd16aZNH952pTA79yRU05X\nv63Z6OEIyQk4uNB9We7iyYO6ItPdRT9cn+amjaX5848LvYitKneV67w/IlXB\ng2h9KLlB3CiyzyeSZfUfu3WYMeLZpPzFzBJiXNupYzAfipp79fTBqRspl7VB\nsjaZmiCG3q0J5+0W2UpJ9NSl7PtnzExRUitvWWJe262lAlYbPj0KSL6j3Puo\nBJY5UR/JYqLVXX9T1oJIM7Kr8IPGk1SIgCuGlfNsxRtN1Zy5o6hvuEiRWCBp\nhicALhP3CWSTuwiYdv7AmmnApWF7aCEn97vSL8Em/0j+xvb8CU1IlGyPQ5IT\nONqUOrYHFN5wrcTbMjn6D7zBhj9TsubByn3up5HbVF/eeXB8ORfDoAvT3JVQ\n6TKvlHXw8x6wDKozJp0DVPRadSCENxaUi1Z6I1F3+xWpxzOZyQb2oPrMEd8f\nBBagBcyiJofgNxuqp3hGnLKfpxTMQuj/xe5cmB+AkBCisEXI6zmZ6HeiK8Cu\n+AdNXzMj0UtQugE5M2iQuf86c8cOD3UULeR57lMxWd2fXExFTP9jigqMZhiM\nnZi66EdcUQKJzdGfpQcEcXkFC24zIr8DivGmjDPs6wdgGsDm+/wmNQsVfJdy\n2SeI\r\n=rL5b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEgH5pCduKWScznRWbaeVb2YICN6RYaJWodoiNm6QmggAiA8pz4WR5XdmuAj9ow4t2qGiMRgizKGYmoPTvK+asLW/A=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.6_1600123282269_0.8079956990754122"},"_hasShrinkwrap":false},"8.3.0-test.1600355949508":{"name":"ts-toolbelt","version":"8.3.0-test.1600355949508","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"4.1.0-dev.20200917"},"gitHead":"a2c42779cadd231a16e02e3549182769554b3550","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.3.0-test.1600355949508","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RdlPcNUHU1KKHNPM+kEWNRwCgFzvjYE2hSedNwuZaxClUrMSF43srxDU2G7hOOXC5qW2LBPMeLktCUXr7I75iQ==","shasum":"ef0c0106717325b78e607620067fe8d6f96decbc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.3.0-test.1600355949508.tgz","fileCount":6,"unpackedSize":495243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY36ACRA9TVsSAnZWagAASkkP/3ojf7yaWTbrYAS+ZUhX\n50a8yZAxtgY8l+HkNUw1hZCn786jh7D+8i1Q5ewlsJrCdXCrT6l+VGQJ0lRl\njv6UPi619DrrMhREwSg8ru/Ef9brv65L+Xv8I7Ra186TAuuth6qbYeV7qUvG\n5e2uRuFu+Amkgj854t+fSwie3xiqV2iW+2kjxD55JNSJhfyJtwiA2dXbbw8a\n5eUog+GDvz8uCbVC6QegUISOtN5D8imQ6E9zRNUL+PZ0sr7LdtjnfyXVCjK/\nm/8YhkJYvcWa3V2C6U7sxskW+jmFW+9TAV66MaVRfnsiHkaB7jzeVdz2h0z3\nKGZ2apVATL/O3GYB6TXVGknVEAGYaGGDh2MkGHKhi0WhtbWSVVWgyuc8gTo7\nvAhy/h4wwcLTS/U7Z1cu8HdUshKPUMM+BYJLgMRKJYmkAVdkSyiGcF7v4ZAK\npWXg/fr1vH9rEkflgYlDKtK2nphKxM+E/Ehz21oGfaXaoUViAOxdSRCrMlyr\nES1QlGtmDGnsPDU2YSSLdvI6VVh/YYOeIKwHwulNuk7rTDoqkX7q/irrGJP0\neJ1Pj7o8AG22Ab+QgLAQYEbD568/ELOPGYFZQTmourgqwToJ/l0RnySaXqqT\npXE4I8k7UUIyGPSM4++cy2hcyw7Xiu6RZi9hJxCPYT80fr5oIBcWc0Vq61p+\ntJ/m\r\n=jmM6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwEAuBzkXCR5qy0uavvVtUCLWNLsaXUsgforjaydvxygIgfqC4JTkbXFyCYISjta35DzMQMCRF7n4qVxdw4owV3Wc="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.3.0-test.1600355949508_1600355967547_0.1370738033569867"},"_hasShrinkwrap":false},"8.3.0":{"name":"ts-toolbelt","version":"8.3.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"4.1.0-dev.20200917"},"gitHead":"a2c42779cadd231a16e02e3549182769554b3550","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.3.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0x0vSYkc3ilLloJ42scg354GymfgDJclxnJSUnhMie1aIjcU61yeFUemAQ4bQfqJimNW5Fy1pcckl4lrC/eYvA==","shasum":"36bd4fb9dfc0a8f908542d956b12298f2e2d2ab4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.3.0.tgz","fileCount":6,"unpackedSize":495224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY37aCRA9TVsSAnZWagAAV6IP+wV3i6dysrD5Dv2m7rP6\nls8BprRCH8yuSFGbsx/JgNsgmqXJCmxBZJuhwD+tKDnQkIwGFmukh1CjDsCA\n7gIHEJnZNRUDVaMvpW4qJHByClmCVihOCu7zlqgrt7I9jVU8QsXQb5IqX4jp\n0gkYgIztHzS7ij8UdayQBJCuGiqBG2vyySyAnbkjf11iZIdGtD+5HLI1aonC\nqHObagr7lFXcrsHRXEsXlv6jvn9fcuVt2cBQ+37zZnmrNbX+ulnuB1EpabCx\n5oo8HO8A9gj5ru14DfjqBcJWb7hP01tg0ltgsRBHINUw2WaBk92pVQ4MYOe8\nQ2fx3wpl7UxXKz0ExGGCYXU5lKDzkRX/py8XROHCiKTQuwhtGXIk7s0RIRa/\nQXkNlI41ufqLDxVJ9xm21Z9jY+auK4uqxrtlyurbSxXbfJcNckana7HkC4BS\n6osP02dJZGtyW13d+UPlsGlP8jh+d/1EnAGwIB7XhW4EkDsnm1MVAMPIEtBJ\nEzhhIBxWnpeGjxASRAq6ddSoLGu3mPjQ5MNDTuxZjjm7R3qBodjSKP+zOPWn\n+r0lUYoDewCFISKhfUPB3Z0Acq3Wjf4zeD21NpoRJKkuBD1rgJB0w6DVZkMr\ndVdjGjzR86ccMkoesmiuAsSXAGHinQs4i/1S45UIun7+6/tZP5wstdlDvJQI\n3nI6\r\n=Zb8W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA6dJisp9tTyC8mCAoR78hM7LmdD1N+VoIBEEvxdFlUsAiAcTYVS2Uf6Gz6QLqDxmTxa74TaAKxuzc8FDoFecOggYw=="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.3.0_1600356057650_0.3258737552261439"},"_hasShrinkwrap":false},"8.4.0-test.1600902138726":{"name":"ts-toolbelt","version":"8.4.0-test.1600902138726","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"4.1.0-dev.20200917"},"gitHead":"31ddbbf080942037659a2f196439cbb2ce43902d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.4.0-test.1600902138726","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-d2KFLbCxEzZXK7rpvf+LlwpubIekRnH0Q2ezRJv4LmqUa5opJuWw2KigVg7QMmyPkj3zgXCt9ZXbHt5HyC8USw==","shasum":"1e1e74fde5ecd54135c9fc4ca7de0b5af4f6a46c","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.4.0-test.1600902138726.tgz","fileCount":6,"unpackedSize":495096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa9QJCRA9TVsSAnZWagAAMdIP/iE1tsV3gbVBlnvEIwKd\nQH1mkf3pJTq/wq27imJ+HMhElnzb9+/wlkw4QGthGHdaa5UjHhKf2sCsBHNu\n8SAiHMrK8q+M412Jl24WFq+QYrSLFh4ZlZtIWl2jvlALHITu33YroOj8Fa+A\nUW3ZnE1udXQIMuaoserv7s//zJGxLBO0JO2pkvqLKEPPms2oNCiRSEheRPuC\nb6eoA9LL0PmghNtbzH9bGYpdswNBh9ibTg74RxUmy82fWhLPi7+b1v3Dv4ig\nBRJVsfKhv2K5XPtyKSKpaIWQCPqqKW1JcYHJLVNF7nl1m7+4eSwrbWmsRqfx\nTXdTJPI43lbUzE0P0dwSfHTcsMfBKbS8dQiZgSm6wzA/cHj+d5NMmtVHm/Hb\nDs6G1kfQm+Qj7JQTZtZCTWy6w7CWm1/QPRSBJycyLMw+F3Qs2kEO9uG3Ma1L\nLksKhD4y25Adz95pUbJaRo3Bt5uampIZKiw3NKE7c6XqY6qVyaUcHgEuIA5R\nIF+1dfQd07kONzp/xUBy6om2SRsSR+vqo+aVYADGxpue4Qq09cFMlba/LJq3\ni5K+WEFtJqwOqMbbmH6E1NIyW5i7r7g19A+c7D9oAQHXiZIb4UID3JVV718f\n2auAND3tfQh76ernv7Rc1zK7EG+Q4Qnnp86V342IgY9zU0/umbaM5LsgZN4m\nlxjY\r\n=wqZs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtuMMwKZmu86b/nfApFsBNIFtkIRGLQ2PEAer4KR3r1QIgJoQFeowdvYNXjLQgwphIRrmBsyKr+qH9jrAfIv6VMqQ="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.4.0-test.1600902138726_1600902152717_0.7721437123840706"},"_hasShrinkwrap":false},"8.4.0":{"name":"ts-toolbelt","version":"8.4.0","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"4.1.0-dev.20200917"},"gitHead":"31ddbbf080942037659a2f196439cbb2ce43902d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.4.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hnGJXIgC49ZuF5g5oDthoge8t4cvT0dYg2pYO5C6yV/HmUUy1koooU2U/5K2N+Uw++hcXQpJAToLRa+GRp28Sg==","shasum":"af6e64b87be3e097fac63600ce9556e78542fa27","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.4.0.tgz","fileCount":6,"unpackedSize":495077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa9RbCRA9TVsSAnZWagAA0jwP/j/6/Uj7b05j7puKEPeX\nnJppDPc7XYAr3Ua3KIpABvcCmst/86w+VEuJKt3YqqS8pmb+r4QM+3sqxXpK\njLTa2aVf/5wOruSsXoFrjJU2UY3q1TOShekaEQB2kxu+EvoI1oEDroePGZh4\noQR7H0e9sQXAtIV+zwfQsEuLkoVXxvL6sOXdMqGcwD9iD1MKu66GRZtz4Yoz\ng5VG7d74l2MYrNfdQc4sboEaQSxVyE+ByA7crRkDOZ828FQZto5r9kY4p9kS\nmjQ8sNV193ZTYvSSp3B55ajaeHi8HqAKTHZ+PL8ArwZGn2CfKl8LxNOcdFfR\nV9tn7pHLkCwWpdoYf+fuaF/sMREkdH63IDl47z5YyNgC+0n/nBvvNoViTk/S\nLVyMhFcl1+LyG4TzoN9hvLv30XbhCvUUGz9OpOGm0Ah8pQbSq92FINi3GQ60\nn/AHcNp5Bif2g7HVDvRDLFUmamac/KNyC2vrKwH+SMh5loiHpFp0YZyhEsFt\nV3/fh79s+dueR6PtypMoenEsX2qOUoKBOp1kVpHk6XVyWmVmWKeoYsimtKwa\nGtsyrNQQS/ycnL/KUmwu1S5DI8rbZu3jtI8jtYXLRqXL+zuZp9HkLX43l9Vj\n0J1OyGZzWYfyWjXd/dxEv5MjMTAHFQTzfogz9FNm9CHZje/DuExt5ZQXidzt\nB0m1\r\n=M7v6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqs5Vso64oC33Lj+RIWyqftHKk5Gs5R9k9pTnTpimQHQIhAK3KPEEoa7toyUMfm+x6GURXLVzYBX2+aoHSubw5nszO"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.4.0_1600902234648_0.13170657320443513"},"_hasShrinkwrap":false},"8.0.7-test.1601987367174":{"name":"ts-toolbelt","version":"8.0.7-test.1601987367174","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"51c9df18bdf0cdeec016ad5715620023f7434897","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"logo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/logo.png\" width=\"175\" alt=\"Logo\">\n  </a>\n  <h1 align=\"center\">ts-toolbelt</h1>\n  <h4 align=\"center\">Higher Type Safety for TypeScript. A collection of useful types.</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.buymeacoffee.com/millsp\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/donate.svg\" height=\"20px\" alt=\"Donate\">\n  </a>\n  <a href=\"https://patreon.com/pirix\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/patreon.svg\" height=\"20px\" alt=\"Support Me\">\n  </a>\n  <a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"20px\" alt=\"Fund an Issue\">\n  </a>\n  <a href=\"https://tidelift.com/subscription/pkg/npm-ts-toolbelt?utm_source=npm-ts-toolbelt&utm_medium=referral&utm_campaign=readme\" >\n    <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/tidelift.svg\" height=\"20px\" alt=\"Join Tidelift\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Read Docs</a>\n  ·\n  <a href=\"#demo\">🎮 View Demo</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## Table of Contents\n\n* [📜 About](#-about)\n* [🍩 Features](#-features)\n* [🏁 Getting started](#-getting-started)\n* [📖 Documentation](#-documentation-)\n* [🧠 Good to know](#-good-to-know-)\n* [📣 Announcements](#-announcements-)\n* [🎁 Contributing](#-contributing)\n* [💉 Running tests](#-running-tests)\n* [🔧 Compatibility](#-compatibility)\n* [👏 Sponsoring issues](#-sponsoring-issues)\n* [🔮 What's next](#-whats-next)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n## 📜 About\n\n<h4 align=\"center\"><i>\"Avoid bugs by writing high quality types\"</i></h4><br>\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#-good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n## 🍩 Features\n\nHere's some of the most useful utilities:\n\n* [Merge two types together](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)\n* [Update the field of a type](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)\n* [Make some fields optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)\n* [Change a type at any depth!](https://millsp.github.io/ts-toolbelt/modules/_object_p_update_.html)\n* [Concat two lists together](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)\n* [Get the last item of a list](https://millsp.github.io/ts-toolbelt/modules/_list_last_.html)\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.gif\" id=\"demo\" width=\"750px\">\n<p align=\"center\">\n\n> **`TIP`** If you don't find the type you are looking for, you are welcome to open a [feature request](https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md)!\n\n## 🏁 Getting Started\n\n### Prerequisites\n\nLowest TypeScript [support](#-compatibility) starts at v3.5\n\n```sh\nnpm install typescript@^3.8.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\n        \"es2015\",\n    ],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [📖 Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Where to start\n\nTo get you started, we recommend that you visit the documentation of the following essential tools. \n| Object                                                                                | List                                                                        | Function                                                                              | Any                                                                              | Union                                                                                |\n|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|\n| [Either](https://millsp.github.io/ts-toolbelt/modules/_object_either_.html)           | [Append](https://millsp.github.io/ts-toolbelt/modules/_list_append_.html)   | [NoInfer](https://millsp.github.io/ts-toolbelt/modules/_function_noinfer_.html)       | [Compute](https://millsp.github.io/ts-toolbelt/modules/_any_compute_.html)       | [Filter](https://millsp.github.io/ts-toolbelt/modules/_union_filter_.html)           |\n| [Exclude](https://millsp.github.io/ts-toolbelt/modules/_object_exclude_.html)         | [Concat](https://millsp.github.io/ts-toolbelt/modules/_list_concat_.html)   | [Parameters](https://millsp.github.io/ts-toolbelt/modules/_function_parameters_.html) | [Promisable](https://millsp.github.io/ts-toolbelt/modules/_any_promisable_.html) | [IntersectOf](https://millsp.github.io/ts-toolbelt/modules/_union_intersectof_.html) |\n| [Filter](https://millsp.github.io/ts-toolbelt/modules/_object_filter_.html)           | [Drop](https://millsp.github.io/ts-toolbelt/modules/_list_drop_.html)       | [Promisify](https://millsp.github.io/ts-toolbelt/modules/_function_promisify_.html)   | [Type](https://millsp.github.io/ts-toolbelt/modules/_any_type_.html)             | [Merge](https://millsp.github.io/ts-toolbelt/modules/_union_merge_.html)             |\n| [Merge](https://millsp.github.io/ts-toolbelt/modules/_object_merge_.html)             | [Flatten](https://millsp.github.io/ts-toolbelt/modules/_list_flatten_.html) | [Return](https://millsp.github.io/ts-toolbelt/modules/_function_return_.html)         |                                                                                  | [Select](https://millsp.github.io/ts-toolbelt/modules/_union_select_.html)           |\n| [NonNullable](https://millsp.github.io/ts-toolbelt/modules/_object_nonnullable_.html) | [Pop](https://millsp.github.io/ts-toolbelt/modules/_list_pop_.html)         |                                                                                       |                                                                                  | [Strict](https://millsp.github.io/ts-toolbelt/modules/_union_strict_.html)           |\n| [Nullable](https://millsp.github.io/ts-toolbelt/modules/_object_nullable_.html)       | [Prepend](https://millsp.github.io/ts-toolbelt/modules/_list_prepend_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Omit](https://millsp.github.io/ts-toolbelt/modules/_object_omit_.html)               | [Remove](https://millsp.github.io/ts-toolbelt/modules/_list_remove_.html)   |                                                                                       |                                                                                  |                                                                                      |\n| [Optional](https://millsp.github.io/ts-toolbelt/modules/_object_optional_.html)       | [Reverse](https://millsp.github.io/ts-toolbelt/modules/_list_reverse_.html) |                                                                                       |                                                                                  |                                                                                      |\n| [Overwrite](https://millsp.github.io/ts-toolbelt/modules/_object_overwrite_.html)     | [Tail](https://millsp.github.io/ts-toolbelt/modules/_list_tail_.html)       |                                                                                       |                                                                                  |                                                                                      |\n| [P/Merge](https://millsp.github.io/ts-toolbelt/modules/_object_p/merge_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Omit](https://millsp.github.io/ts-toolbelt/modules/_object_p/omit_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Pick](https://millsp.github.io/ts-toolbelt/modules/_object_p/pick_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [P/Update](https://millsp.github.io/ts-toolbelt/modules/_object_p/update_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Path](https://millsp.github.io/ts-toolbelt/modules/_object_path_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Pick](https://millsp.github.io/ts-toolbelt/modules/_object_pick_.html)               |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Readonly](https://millsp.github.io/ts-toolbelt/modules/_object_readonly_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Required](https://millsp.github.io/ts-toolbelt/modules/_object_required_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Select](https://millsp.github.io/ts-toolbelt/modules/_object_select_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Unionize](https://millsp.github.io/ts-toolbelt/modules/_object_unionize_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [UnionOf](https://millsp.github.io/ts-toolbelt/modules/_object_unionof_.html)         |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Update](https://millsp.github.io/ts-toolbelt/modules/_object_update_.html)           |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n| [Writable](https://millsp.github.io/ts-toolbelt/modules/_object_writable_.html)       |                                                                             |                                                                                       |                                                                                  |                                                                                      |\n\n> **`TIP`** [Add something to this list](https://github.com/millsp/ts-toolbelt/edit/master/README.md)\n\n**The documentation is complete but it needs more examples**. So feel free to [ask for examples](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [🧠 Good to Know ⤢](https://github.com/millsp/ts-toolbelt/issues?q=label%3Aquestion+sort%3Areactions-%2B1-desc+label%3Awiki)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md).\n\n## [📣 Announcements ⤢](https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+)\n\nStay up to date with the latest announcements with this regular digest of important changes.\n\n## 🎁 Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. There are many ways to contribute to the project:\n\n### Community\n\n* [Help the community with answers on Gitter](https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n* [Reporting bugs or requesting new features](https://github.com/millsp/ts-toolbelt/issues/new/choose)\n\n### Codebase\n\n* Improving existing documentation \n* Adding new types to the collection\n* [Getting involved with things to do](#-whats-next)\n\n### Pull Requests\n\n1. [Read the tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab)\n\n2. Fork the project\n\n3. Clone your fork\n\n4. Create a pr/**feature** branch\n\n   ```sh\n   git checkout -b pr/CoolFeature\n   ```\n   \n5. Commit your changes\n\n   You **must** follow the [conventional commit](https://conventionalcommits.org) to be able to commit\n   ```sh\n   git commit -m \"feat(name): Added this CoolFeature\"\n   ```\n\n6. [Run the tests](#-running-tests)\n\n7. Push your changes\n\n   ```sh\n   npm run release -- --no-tags\n   ```\n\n8. Open a pull request\n\n## 💉 Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## 🔧 Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 8.x.x       | ^4.0.x     |\n| 6.x.x       | ^3.7.x     |\n| 4.x.x       | ^3.5.x     |\n| 2.x.x       | ^3.5.x     |\n| 3.x.x       | ^3.5.x     |\n| 1.x.x       | ~3.5.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes (it happened that TS had breaking changes on minor versions). Otherwise, the release versions will naturally follow the semantic versioning.\n\n## 👏 Sponsoring issues\n\n**Sponsored issues have higher priority over non-critical issues**.\n\nYou can either request a new feature or a bug fix, and then fund it.\n\n**The money will be transparently split with an issue's assignees.**\n\n<a href=\"https://issuehunt.io/r/millsp/ts-toolbelt\" >\n  <img src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/issuehunt.svg\" height=\"25px\">\n</a>\n<br>\n\n## 🔮 What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## 🙏 Acknowledgements\n\nMany, many thanks to all the [contributors](https://github.com/millsp/ts-toolbelt/graphs/contributors) and:\n\n* [André Staltz](https://github.com/staltz)\n* [Joe Calzaretta](https://github.com/jcalz)\n* [Matt McCutchen](https://github.com/mattmccutchen)\n* [Monroe Ekilah](https://github.com/ekilah)\n* [Nathan S.-Sanders](https://github.com/sandersn)\n* [Regev Brody](https://github.com/regevbr)\n* [Titian C.-Dragomir](https://github.com/dragomirtitian)\n\n## 💟 Friendly Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.7-test.1601987367174","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-o/m3YhI3rNscxnlwfcrUwjwkrgRT/kpfBHXF01IKgyJXGi0WAZ52Jy/BW2kYjUEB1kFcmHsn64PLczAtck0N5w==","shasum":"7b240358ed05db3a755a6e075e0650e3fdfb2c18","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.7-test.1601987367174.tgz","fileCount":6,"unpackedSize":493439,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGM0CRA9TVsSAnZWagAAiaYQAJr8/ABKWL7mxnaoJFze\nLoPMp7IUXa+hLabhi/xkximYsTcwC7WzyBw8qDLK44CiKH62QP0K3bI6EPKW\nWcJRUNgas91V3xQo1JamAbC8vXT9c/bYqafz7ujMQGxQg8cGZjEZ4ytErNN4\na8cD1F5E9OtdgUnUaiQpkCxdI+lMq7EzvQSt7EQP4ovegCeCQhCF6XMITjZE\nXCG7CXNkGQjNGTkHXxLcpXOvyag9TIxOmIMbJclJzwQ9bbCE2SpvtRJxDTMI\nbK0qAT86s9FN9FWIjfM2SExjbhQyINhuGMnLFyBhkHy/UnHMEYD33hnwGGEz\nxILgh+Tf8k1DTPwk4t2UwWjrNhEJ2c8r2TjI1w/RVpNUzp+OVUsX1m0mY8U9\nunRFQ6Z0XTskRTqvz8olIDoZuB4AZ611oqVnFPabaUzk9deHEhSLaLgU0bkP\nJu3byf4ftTJv0z+jib4cvxUZDzSgFYgWizbJapfWsSGx/SwtqHjNBMJuugw6\nhRaaylZkjo8YOm4kkDx3waAtMX8RGuL+9VfgLGZjhvaMha37luePK/KnV64h\nUDdszoLImf01J26Kd8qfIvi7KBr749B9VT6yRl5IMzWLqeFPFk+OHLKsMHdf\npBwLwtJ9k90WKzlvi0zbm9A9kgGg4gQM5AGDllJo49JObPQP6UJd8ErY0U3U\ns/0F\r\n=2odw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDx9b1G9Bgeh1UthDzKh0uHYwBZs/zw2Ph0LOYU3+bzZQIgOPj0Ij2ErKGjj/81lNnP/lnENBPuXJyL1aqZCQG5i/s="}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.7-test.1601987367174_1601987380130_0.6369937417004354"},"_hasShrinkwrap":false},"8.0.7":{"name":"ts-toolbelt","version":"8.0.7","description":"Get the most out of TypeScript","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scr/build/clean.sh","build:code":"bash scr/build/code.sh","build:docs":"bash scr/build/docs.sh","build:types":"bash scr/build/types.sh","ci:branch:ad":"bash scr/ci/branch/ad.sh","ci:branch:bd":"bash scr/ci/branch/bd.sh","ci:docs:ad":"bash scr/ci/docs/ad.sh","ci:docs:bd":"bash scr/ci/docs/bd.sh","ci:master:ad":"bash scr/ci/master/ad.sh","ci:master:bd":"bash scr/ci/master/bd.sh","ci:test:ad":"bash scr/ci/test/ad.sh","ci:test:bd":"bash scr/ci/test/bd.sh","release":"bash scr/release.sh","test":"bash scr/test/all.sh","test:code":"bash scr/test/code.sh","test:lint":"bash scr/test/lint.sh","test:types":"bash scr/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"next"},"gitHead":"51c9df18bdf0cdeec016ad5715620023f7434897","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@8.0.7","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-KICHyKxc5Nu34kyoODrEe2+zvuQQaubTJz7pnC5RQ19TH/Jged1xv+h8LBrouaSD310m75oAljYs59LNHkLDkQ==","shasum":"4dad2928831a811ee17dbdab6eb1919fc0a295bf","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-8.0.7.tgz","fileCount":6,"unpackedSize":493420,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGOHCRA9TVsSAnZWagAAJdkP/AsJYEgsDWcN9IW4dRBE\naiPCuBiydP508Q5wJ4JMakL7kr11JgYaqskZ8W5NSl1A6s59Dh85d+nGQQES\ntp1oGMMPSMU0NEVaRSm0A/3D9CJqs4QNnpeZpxKBZrWhcKrC9i0mEXWjQpo9\nJFoeG6NJjxgSdf4feV72X0G7k33ZPcXAUav2LbPNNqBUJ7fQ3RQ1Kqry6pcW\nE52dJm+ryXTzCmV/piv5HyqM7ghUhpLZceo5PRocfQR0G0K1fAixiM4ygHa2\nV9oVoTN95nfKn0r6WA99HbMC5OfDUzddySnlqvADJnmhR7ZQQs1qVwwfbt40\nnbvi66um0JyHHmDtBywBYXsv7bEidaHLwkqkzd8g8mmfUJnC2XoZ4nWjekti\nGGYnNLGykjOonhVKl71g6gPGxyneDAJRZLaE+lgalBsv+8aql452GRjwK1Us\nhXxy5Mmo7chUz737vxyQjZEQyX92tNfJnx9vwqZJ5ezpHN28XUgKklVuIqK4\n1OGzOpdQM9Nmq6GdLndJmxfxz1N3jLZ9yx1804v7j0srWf54FsasmMolx6Rb\n3av7+yxw+7VgP0MZnQPwK+9ZbT9Xhoo+KJz+ryfU761m8Fkh6XBe6wJ+4veS\n9/pJzWoEp3InNLzP+LylsK90tMa/+E55ILvVAyejwIGUJpblbM0kcmFeRyC5\nnapk\r\n=VyqK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxbsUCtx7+3rIOFJDj0rN8uZu6pFYO0J/Zyi+0C2XIuwIhAPUBUed1v3IozG5i3aKUbfkK31jy0AHZn8LCN1fhg8EV"}]},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_8.0.7_1601987463086_0.02335802925360997"},"_hasShrinkwrap":false},"9.1.6-test.1611974721747":{"name":"ts-toolbelt","version":"9.1.6-test.1611974721747","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"4.1.3"},"gitHead":"dc22e36dee1e2a71551f782c143279e45bdee610","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.2.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.2.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.1.6-test.1611974721747","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-PYNBh/itV/vuFe6xscWzwFqtJMUuajMuI681hGoQbZg1vJBu5gCoSn5AWfvLQFxmt4HA0yaUyYpKwsR8pslJ1g==","shasum":"9212e77638f5c878ba3ca630d2b01d89f4cd5922","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.1.6-test.1611974721747.tgz","fileCount":6,"unpackedSize":1773461,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFMhQCRA9TVsSAnZWagAACzoP/jK7TNaRA2TUi0pru6yC\nz4JRXzDi22U0Ir4pF1ieFssHCnFdrEeF/FaSDXX9SlvjQFhXW/w9Gbo1tH52\ns8Xi3JYh+X3lvwsVZszYJKXwj9O/MtqG5XVxEfVNsjGoaHk0sXpjhGYOp+kL\ntwVk3et6t2XQ3Ygwy0WSbVxGhDrQ6fmR/ULZ3cv5R7nfAjpMcVr1v8vvPITD\nWPheTuDePypFy52leGwrjNjN6yMJpicQQvR0+fBIYJzgC/jRsV8drrZSX2fo\n9gNM6XLnb4tHYDIJrd+sELGj9fhq3okx8JtRnnnkp9phZ+4J/zAbtyn1vSY2\n4DAwawKA+U3yPcMfp+GiMclr1SQqlH7BKmag30fmQwhQWCLtX9C3jEoSmLPx\nY8Z1egYC4VeQBOrR/Gyy59tioTy69DzcZAjlHV05+4h2WcWZFvrnvAdpoucu\nv4gNVWNjMAzCISgbrEzYqci9O6FEun+uair+wW69mbM4g0AI745w/6q7CmYc\nDCXmO6gE8enFVdc26Neb1g/LpXMmSG2M6BT1q0rGS0gIgunZds179lmsR5nW\n7yQhQ6uZWzyxd1otEgZWVgs67xr8aGIw5pqYOlt8Kz58zM+dhlW/qrvlHGxT\nsqyHSmziTp7+5a389/3oZHZYjKIv4gIQSHoJ1s5HH35gsBLQ+GWy9uw4HalR\n1zrN\r\n=MJr1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDL9yJ/myOvyHohuhq2cMM/LEqHkAyBfgMiGsEruPJNzwIhAO+BLTSn42ukuXGMfW85G9rMJtnECR6A/SgOgHz7gxfC"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.1.6-test.1611974721747_1611974735447_0.9245877442835462"},"_hasShrinkwrap":false},"9.1.6":{"name":"ts-toolbelt","version":"9.1.6","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"4.1.3"},"gitHead":"dc22e36dee1e2a71551f782c143279e45bdee610","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.1.6","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-EBFTHj4KfWmPp95vmUOPpzopBPybGLum4EPXUH/5lcynwxjv3w601YdHxjWdokCsV3i47zvAmIbHLA0t8fKz5w==","shasum":"98b2bd471c05924e01306c6bde067119c5ccb9fb","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.1.6.tgz","fileCount":6,"unpackedSize":1773442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFMiiCRA9TVsSAnZWagAAMR0QAJ1xlNsasPf6DjRFEFFC\nO8BxZgVnOFpht5f5B+0F+einLhqFxKo5+wDd4tZrW7vqgrVIMqNPR6CVvXZ/\nW4/GDSjrmRCSfU43+pTdl1m6a2p6muBeF7PFib1NLqS2DCy6dqPfQLMci/2Q\nUjQ/L0wS2nfbwNMdSmcJrpbPLI/yF0Y4maTNUOKVGWLMQmSy6tY/swFBp8Rk\nY8IWjhnyRmT25CK5ZH0Vb4wZaOfzxCElfpapqBoSl6RpqREH/U+FBOesJm2w\nSD9i0TkFzP574sn+dydCpwIA2S1GGc3c7/PLd2ca32/Y44lcY4nFW62+ge/o\n6CXUt3oNAMtbJhmCJshySqhD5siT8xcM+hjYI1QRT9DvxfTmQ1Dsw5TjsR9/\nPcHSQc5yms4SFMAFm1dVPH9w90L0T9N4AUXKihCnyXJkt95JIw752bYeSOPt\naUzpyttxVqQMiOiQ5nIVLjv4Tq9YhQevQoLBAum6BfD4CQxvbJzlMJaPZAGa\noS9MXKqQ4I081FwrqR3OlzlNM8SwCpxxCZv8czOeDYT39v4mPOV/5vfnr7/8\nMEfSIrx7id4HrGVCH0W7qEISXsJILTodlyhEKfq5FKE0qXqnAN5HnZ9cAt/d\nbENLJPpAYoXaZM5BY6MHiLg/+HzwkEN+GnUcAvN1rHfRT1x7MBKtdFfXEywR\na1HN\r\n=eOEO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDg7aZNgyggXy0kPoYPqOtGx/T8WqNjED4UhiPTKT+L+QIhAKq1mc2ML/IjDAU5lUNTh2JWr2S9K9nPHiOhuwiuPPrP"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.1.6_1611974817900_0.044634286570288895"},"_hasShrinkwrap":false},"9.1.7-test.1611976321736":{"name":"ts-toolbelt","version":"9.1.7-test.1611976321736","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"^4.1.3"},"gitHead":"3564cb964c59613bf9e3ba33891a39d9055263cd","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\n> **`TIP`** You can also grab the demo [over here](https://gist.github.com/millsp/f7f7d18773f79bf0618fb5cd55bd48f8).\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n|            |             |                  |              |               |          |\n|------------|-------------|------------------|--------------|---------------|----------|\n| **A**ny    | **B**oolean | **C**lass        | **F**unction | **I**teration | **L**ist |\n| **N**umber | **O**bject  | **O**bject.**P** | **S**tring   | **U**nion     | Test     |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### Internal Docs\n\nIf you're interested to **learn** how the internals work, [this tutorial](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab) will get you on track to start writing your own types.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\nIf you wrote tests & would like your project to be tested too, please open an issue.\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n* [`eledoc`](https://github.com/millsp/eledoc) - 🌒 A material dark theme for TypeDoc \n* [`utility-types`](https://github.com/piotrwitek/utility-types) - Collection of utility types, complementing TypeScript built-in mapped types and aliases\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.1.7-test.1611976321736","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qwS3E5WGYShemfZtyF7yQ5hyyuXg1mdtBU6EOUocpwKr1F7ApeE/08SVWJOqT4TvDUh53oHLtXyzBXUJL3gj2A==","shasum":"7d5e9f6e557ce25c8ef4b01744e1653c11b0e123","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.1.7-test.1611976321736.tgz","fileCount":6,"unpackedSize":1993070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFM6QCRA9TVsSAnZWagAAtSQP/izV7X0OBmaQSpBo5Akn\nwIHScZnW6HnktlkvJXd84dDttTbf2km6UhQKBm4qBePi96G4LhZm/wVdgvTz\nbVxFJ1uqWKyFLPfWWph7thNmyUChLF6yvInwqTqoeMIzeZk5QrR6iQV+gOa5\nrh4oRJLKGozuIrGh24yAq8gYqd9foEwECZHA5pm1geF7QrwalqnU44qAwHti\ncBDtWuU2liNZbTmLFoppG/OHpSGsyyIlce68vUwsjDbI3s/RLnwvqYQTJRsZ\npMgQsFNGP+GVI3Q2BBxDjjrYrwaG3TRk2Bk+8cSL735Tal/ji0cdfqpxxdsI\n9KEA/4mW8eWJT+IBtq7aFsy4SIKAVT0/GaieHFJKWVHGKXEtSyDBGy/LctGo\nxMEFVbs8ZnM33XDLV1RmRSr01rdouQeWd23lDp9evIUl75VAapvry1wKokiQ\nm78o1xKJG4giW6O010hKU1IGQBB7y4UlKCyDjMfp8Ijiiy0GKRauSHQUJ2Hf\nA+xCXNAsJUivjFPJ9IqAabRJxCGgw7JLx85hrwpQ3jJB7fghc5B92jAzO4Lr\njgGJw7dqs8NpptSfaE2odnRUgG0sFU8MsPp2iydPUi0YP0erBD86oy0bjqzN\nZ3D6EsLZyPa6F+gLKPua5uGGxvXT6Famobg+InO+zRLBt+LbsavqzVKW9dXH\nWltg\r\n=Ioui\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBnvakRhpobfajGoZWvQXbCUpbcmrdlXchj67c2U0eWAiEA/dty+4zJClyNVpr/18gvLC3nX7cxuUKTJsFcI6RhWtA="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.1.7-test.1611976321736_1611976335683_0.5899128998088305"},"_hasShrinkwrap":false},"9.1.7":{"name":"ts-toolbelt","version":"9.1.7","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^8.3.0","@commitlint/config-conventional":"^8.3.0","@typescript-eslint/parser":"^3.9.1","eledoc":"^0.2.0","eslint":"^7.0.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.20.0","husky":"^4.2.5","npx":"^10.2.0","sort-package-json":"^1.42.0","standard-version":"^8.0.0","ts-node":"^8.10.0","tslib":"^2.0.0","typedoc":"^0.17.0","typescript":"^4.1.3"},"gitHead":"3564cb964c59613bf9e3ba33891a39d9055263cd","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.1.7","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-BwrbP039VcsgSaMsKxTok3YYjRurjjmYPcmkYtugkC/For0tgWW6LMis68vlu764nmZGJ+Oahj6/btW3omsQUA==","shasum":"1fbb1e8a8c9cd94dfab12f69ebe9e093f661387b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.1.7.tgz","fileCount":6,"unpackedSize":1993051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFM7kCRA9TVsSAnZWagAAm/QP/A5b8ubVhvYvUUtBsiTy\n8G43H3JSOLRGQWp++1ycsx5Vv1EmQ1vmohDtgx490rM5t2P/YluXOfR3HiA2\nfgutq+72rR0wsgEA33bS2CzZXieVEGe0le8F9J7T1/yKl4OIr/+UVFhkZf21\nTqkHFRYYGwnCVXuD5WH/mclPz89KDQ93dp6/7IzNsvourYC8L6ZJFwu7qPD1\nH/eJiNEcv2i+gmj1oI/O4X3d9TRrzsKuABAmv5y6o2Yy07e+CkSTVcpAPc60\nMZrfDS0KlAI5w6ob6eO7d8Ax/Iuq7zTA9CUMFx1HOlR0SNtFTHbxZ71vYUNm\nKYI5ck6/etx5JL0Jfo5XjqIurCVinb9iSwD2CGPvsoQkaynt7oHjmKwF8J26\nSPNleHg3U7HR2vKrbj3B7hNc/Y9jKSu7KjAeQMMuRL45M1NZbG3QRZ97jl/U\nJAo9TU5NP6OqE9ts2Of68ofqlfugdcWEm3SQWIP5w5l4cCzATahTGeKaysa8\nvDhhAKgW/arzsrRzLWf2JQa2KPbGky/R0KT16/yT/iZIrLdtUpg6DjREv9Tc\nhEs4FPwTFNyRyBD/uf9v3noFaDz0MOFwJJ3FyfVfElgAVlk94Jh6dCfR+6jI\npSI7Ppj0FhZRPTf8TziSy97IqywK/ztzKpXC8apD9/izzBtIpVnrbXWQsDgT\n8asu\r\n=QThF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAOngwgzdLET9GfKLB4RO0BY8IkFJ3QptaoIfD/gXG9GAiEAnac/MeND9TAw/5r1zFFqUnqM82FrCRqxaR+y3ZhQLw8="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.1.7_1611976419617_0.4255284371546284"},"_hasShrinkwrap":false},"9.2.0-test.1612239500053":{"name":"ts-toolbelt","version":"9.2.0-test.1612239500053","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"fd03c53dec985a217587687a4d584688525fc955","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek/utility-types) | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.2.0-test.1612239500053","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZNhOnnyAMrO3s1LAhuz3ghxrJXWR7y+G1MkhBKyuBcwN4P7SUZYtirbkhnjrLrF7z8lEf8J52H1FnTJFZ/uhDA==","shasum":"4428986c68ab3e88474e918124b9e65483870fa0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.2.0-test.1612239500053.tgz","fileCount":240,"unpackedSize":1970078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGNKbCRA9TVsSAnZWagAAyLIQAJfqqRGzJ9v/Pza1ZmP4\nhbdu3AtO8wNPHcTGaUW92s4+5LMssHcM5nr+JkpoVbgXYx8VrARuLziM0ic9\nFSXb1sAj55PgXaF+MJ8+EAxXZmv1p5sbl2bP6PD7WlV7RU2sFJL+sFnewIBM\nOH+VS6Q8MEMNNCGYviVE2zm2ZTEwIjAOPGrmfoqxoXGsNW0Gh0gBIEmeW1pC\nXG3nu28U2fuCCxPl33ihCfKHPoaXcpjuYw/8HjqEc6mavt/smkM0T1g1GmYY\naaAyHVIUpmDBA6sqxCdR5zBTKAi/XS4J9i8D1Z6QYimV+tTDkt8D9SbMCMAY\nJE1ePCls8cnWHhrylGRUbJuA/OLLgbnKpY/a6qMpb8Ml4VQqyTscyKqR8R7i\n5EmxyGfT11YsyCxkUU37Dd3x0viGr3GOVkmuu3x//Iv1wvY2s4k4FQ6H/LLN\nesY7ga+Ej7nsnJeldJkeT3Feo34oaVQqgv/GpsuaGar8tMfWr/DWBC1xMiY8\nb92Q9Fd6tIj0qjfVy6PCwF2sXFAHMwO/61SkEAG5zqgtm9RIWBEDjN+ZJubU\nkyOZdHk6bnQDs4qZAIVYqq+rKtjSXErtRorhhDFqOqUbbXYjeA0c05hLWS4t\nju24qK8sRuF6zCc8MCmFGupOCeQE089JgvyKQTwEn4HtD3qRZsdaXEL2xyPK\njc1K\r\n=hjSo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/Xw4IZAkOuAVveF9BmWcmpBo1o9V0DBdRvWVHJ5ELLAiEA9/UxjwnfW4+iYf+xpbksds5SIpiYsi396e7KyoM9rZA="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.2.0-test.1612239500053_1612239515025_0.32524073996279257"},"_hasShrinkwrap":false},"9.2.0":{"name":"ts-toolbelt","version":"9.2.0","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"fd03c53dec985a217587687a4d584688525fc955","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.2.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/D4fMWMSQjp7hN9tIqizdjtMa65X79HU3uDcXVyD5qHTyOni2u6EGRiW5BNYIf6CW/i/ZAPo9lltrAu7MUaS8w==","shasum":"9ea7dcab288ca119b36c1363dbc52e39b15d7caa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.2.0.tgz","fileCount":240,"unpackedSize":1970059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGNL7CRA9TVsSAnZWagAABrkP/iN47xw/BN4F/HGcIfF/\nGrJtXQTulVWDGh4hnP8qb6cOTbkdw67yAUAB2v1nMTf0Pu+afKkHBjU6vkhB\n4IFg4+y7i7hMl3h14TRJWzRepJCMaM1EpTMOqGL2Czw1Qel44qdndimRS+JU\nk6VynlOuhXgaggRnh157UzX/PEab9HLEPN8qePIKWBKBMubKuttLH+qdEGso\nBZkoXJTRO6LfqQUM36exAXYglpZrBglgOnWrFuHcmPeAY9q37y50EvfSLB4H\n9shKCLjRXWeqoCMnHQnp9XDoPVmanVCFyfyG+SB9sKum17sTQ6bOSNA3WPo6\npbWeLGCN4z1XGIte8Mpds69/nD+nmwP0//dbX1q2WzP9CqYEbG8Q585SMUZo\nPBtkXhYd8r2JOA+fl9eo+Pqq7XRy9GUm7hJ0rIciR8B9OME9dWz+qbrV1+Oo\nAhVgMeMX+6Xj85D4VR3Gbc42x9rYfMZfVQzbXC0YJUbO/JWm9jTXhXFDaq9j\nIJUAEfAjud/IVDJfeM1UWRQ4w3q5e9OfZDc1sO43oKi3Jh+lgOUlsg2FzNQV\nRE6O4Zey0JGkQKir+hG2g6svQmjNALdtsyGz5O6e+6gFSa502IVJnL8Z6s/D\nJxfqnJkGDUap0pR/HlGZACXo3N75hM8+LFoNjqD9f8Oo/HJZ1IZSomaciPkC\n5qQD\r\n=jpGY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZZ7z7e7Ay9+hoQoB4HOAhOP1y0c1sFTZEnT0As/J1oAiEAnmGGJvAMUzMdSuFtmGq6KtMxMVS1EsQK925NPIvVBsU="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.2.0_1612239611019_0.7543191871042776"},"_hasShrinkwrap":false},"9.3.0-test.1612279009178":{"name":"ts-toolbelt","version":"9.3.0-test.1612279009178","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"72d335a8ad04f948a2ee56451fd18b9444904af6","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek/utility-types) | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.0-test.1612279009178","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-KHHNhmitWOgq7knSD5LVH9WX5PWS7Nxz7lCZ6hRzFLV8/6nzvPdoquJYMJqgtsFK/jz+jngKIujQKGgy9KT0Qw==","shasum":"c4a8a7a5074976fd6806375450fcd6e1c75a77ff","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.0-test.1612279009178.tgz","fileCount":240,"unpackedSize":1975932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGWzxCRA9TVsSAnZWagAATqAQAKQfUdUo5/DBYwsDgTpN\nvo580QnrHph3xvgpHbJJgzj6/21saZJMZ2B87MhlNPVINi+Ak7i9vm7RYuJ8\nGEc7nMp3XPcJIdyRmFrjMAEZjRddxMDq1OqnfgimVtYmUxXLKNYObiZCrv2A\nIwjLU1Iwhc9B3sHGD5N4v9NArdbmJSI6gTavey+fMts4FJi/ykAuoPFDfOJE\nSLSytA71ktDOXoVX1OIvCoHY0+YA3Mq0Mt8RmS2+p5dAwswO1V4IZn8/Zzav\nazAGZOyOWybjVJxu8h0rSUP+bqZtRPDmrJuIGX5dT0Do/OtTmfJVpRrAcvMX\nKdSuRSSWnNbjjSESot3plcZRW1CGhK37YxUhriCBtWf7GUEsX/GrRAKlevEM\nwA505Ao4iShxHH68Z0E5cWJiFD1ICzV7YlfDGNgXfx50pp3oErqq5Y/7CWs0\njkRbIOlmSKO3io57lH4lH1XjMYDioSClLu2OprlbmCM6B2fbpHFhkhkC/+zw\nA3lNBXmpyusyDAwOj2RQHFg0RiRHGnAu10KyaCKB3JyeMVCitk+xSJtUKpCq\nijcdC7rqKRzJ3b4vJrYROjKHFvHXW+5CgjUD1jttf3ijreEjzD7KDfOEOyMn\nFiTjCigDGJHHVi9KNuFjjcRwcQ2pjEDhyNYwgYRJNcI7VFeojx1mDdF5TJrD\npktL\r\n=gsiX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGhm4FTuy2UXZ7NuTHekLj5lNFSvYjYlqDUgQoB0kzn6AiAJNkGyXWVVKnycG8eBGII9+paaJFlbLaK+fpMWzmVeOg=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.0-test.1612279009178_1612279024169_0.713620821915194"},"_hasShrinkwrap":false},"9.3.0":{"name":"ts-toolbelt","version":"9.3.0","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"72d335a8ad04f948a2ee56451fd18b9444904af6","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jV84naLGRM4LjiEMVmhrxpHT22C3ptHSQrVPPusdSgjdf1KsOrTJaDCfB8y7Kk0e0yDFKS70Pkqw1quP3IxXEQ==","shasum":"7fe422f22e47113c8b6c85dd1718d6640d75c135","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.0.tgz","fileCount":240,"unpackedSize":1975913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGW1NCRA9TVsSAnZWagAAZ1UQAJW1DGoEt6MwcKkkVW2s\nzeJ6E7e9QgfJcNlishFgEDliLcVlGzywGuckjOpwngPQd/4Rw60+6r9r1dVM\nDHfclQPrK77Nyt33xrJUP9zN5gKXPv1cl0Nx7NI8GAse1PB/2+CGMSyT0G59\norYx9Z6rRr8qzO4o93g6aVYUFvbgNICo6ix68NrSyJ5JGAkg+/tOZLH56v8e\nozH4kbgCsPmtJXPzMPWXkEnO04dGhrnBYDF9ETQJyCsw+ybvIe0dwxcVdY4k\nL0FNaXkDqAX5Fgtu3lsTJcp/ZDeLtGcjowgSVUYdpID+wYsgI1TkUPa4UjHn\nr4pRTLhUxaYdpQT41KtyM9cX68t/3tyaNyrVWnLBSUectPWJfY7YYRkOy6t0\nKqgiLpJK+AXuyP1hy+vX8nKQJIX0CBf1hiYGYXRuGZq4UnD2cmZdbGgpAN+H\nyCAXo/im26neBCv8tbCV/Rg6kRp/daJO0Wkr0dre+JzIqA+9L/hIKPaJuEZJ\nbyQGmKjycKBvnur3mtNUmeaGMM3gRkRbdtw2z+NKBYMi6QShwJsEvtLrDYMQ\nJz1rjZknr3L8Ee2/6X/nT7VlAAGMX5SEsB/bhp+c80aJPkG6nnJwYQduyewb\nS95WDghznuOHFxoFCx86o8iJIdW8wT1y93eXMJ4EISZBld+vCI5Ir7kO89+H\nmfFa\r\n=A6rQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6v9pdd4p2n2wZivGRWu44bv4y4krUAVi+PHJsK5hLgQIgG0fswg5HAVhsEL7Z4MweHnjNMXcDnsfyUxwweEvOPAg="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.0_1612279116607_0.3646172674196191"},"_hasShrinkwrap":false},"9.3.1-test.1612289204883":{"name":"ts-toolbelt","version":"9.3.1-test.1612289204883","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"17435a1fa2e0a2f3db99dcefe7a4ca6fb2bcd57e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek/utility-types) | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.1-test.1612289204883","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TeJI2RLDT6d+KXA0mheMIGEz4FQe8i8pqMQ4eSCfIpCIzS9MyDbVtr2bYMLroL/n6vRiUbI41gO7k+6yOsJevA==","shasum":"ef4a6cfc0e363ae523d20e6f5f08c3bb47852553","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.1-test.1612289204883.tgz","fileCount":243,"unpackedSize":1977254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGZTDCRA9TVsSAnZWagAAlTgP/08WXVhaRkw2VDLo7U+9\njJq2S65+lAw2xOnl6l/gY1TwAGoYzkI1ElaFJbygiKIE0uTKTi5JPzobuZiB\npRiutC7/Z4b2ISBeTfV9GBnnD8ihI9O9AMzd/uJy/u+1Xb1LY+ZdzfC98QD7\n+zn12nrMN7Eaogmz+JXirkdRPkdNu3gQ0pk/bCYIRDfVi5x1XsTsTTjhTzJy\npF3qV1EvSqSTtazcg01KCXQqtL3QXTXCL9gBLk8XpRWrf1jf8O74fKLVJdcX\n9rIjT+3TN2ChhjJHK0jgyojXKQeEQvi6Tp4ed4hZj8GIK5xETN3UH+uOzHdq\nZV5C2vwgzuKc1biJUgL6FebsM9mJNJcDU8BQh8X9si440/mPo7HYXtXwoe8U\nVHbChI3xtNvPHQaju6+mzvgZVkNLJ0jVDppPeDMWHpdTsYtqLibDYLpqf2NM\nRd2K8+psDZiYXx9VxBwi8lsS1VdtqKuesz1BqCTZPLb/Xh9At1eKnwSQTle3\nwWZhPwv2X6T0K36RisxYY5jl3AyI/31naYBKmBxD/lZE0iPZgNM0JY4AJJgV\nx00Eihf5jWxnonXhXM1qSzsNWZ+K9ouD51wcuflsFYh84ObFObQBZCm/KdNG\nFjRJY9kOqCMo8yCuB/wZ5m8b1iz30fG5RlvVoVpjgD0S9b2ekeUELSFhoP/5\n81Sv\r\n=v/QI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFS5gYNhQnFdPpJFVQKEuhJqPc6a0/5fMCOC04F4jEkjAiBWTmN5Eo3dxLGQj7jJ6GcVAJ/OW59t6nd+NcagE6AOYw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.1-test.1612289204883_1612289218821_0.6185541837629231"},"_hasShrinkwrap":false},"9.3.1":{"name":"ts-toolbelt","version":"9.3.1","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"17435a1fa2e0a2f3db99dcefe7a4ca6fb2bcd57e","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.1","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-7b/I5JsKoik/rRtabXa1/eLxUjhyiUi05Pwx6FPSQJ+ezGvdJH0hbxSQxOf7tPPKPQsRdr5f21evMSlhMLFRdg==","shasum":"8c6aa7f0d876ef86420761e4d528874b1785a4b9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.1.tgz","fileCount":243,"unpackedSize":1977235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGZZtCRA9TVsSAnZWagAAGaQP/Aiy3fkgeXR9cQHcAgeS\n2BanLspir6mkc6q+mpiKYA+B2XfNwXg6apo4TFdJa5Bph95Cp/Kjb76vuhQ5\n50XJ2vRshUCrz3N/zn500GqLAfYrPvpVzZE3KwwoUrxX/EXAfwX82Ywh57W6\nunwBg7/2VJZaQeyY1Wwelg6xpyY/LnWUs/h1gZm0YZni4xZmpFnfk8lX8kbR\nFRyQMRQWmj6nZrh8FYGMaD2TBbuPkRmQ2FgCddXrza9xok6KFVODEuS8PR1A\nRQGama2pefGh2+ncnQYBOo70hHkwAKlWjWKOb+JpwAaPZh7ehdBdVYARMgmI\nN434ReiWKiHGsGh8eKpM3vzWQUmqcy+iwkIeGK2skLlK+qWEZSUKVBNOAxjO\niSoSPj+L4RBO9JPcJs1BsTKyh4MpMmsR1pypuXgppBO6uN9FiMnohMhFQOkW\n1FcoPAvwTwvJJCUptqCjaHqtYJ55Fd3L7SLLmKR4tDDITpT4pBWNoX0NI8nt\nlQAwZ27ZTfm5OnUACZd5EmdmRX0BV6ylnUsx+KnL9LwfG+0XtEa2ZollxiSN\n56WeA+XRqBikwrPxh3oawA98BELMXTWkZo8mroF1QN9bjHG90V8UpDBGFehf\nim/yKAR3zZzOdxZg8V78nNum+1Ag4pVJYzP3m+UE8IrJIGPRjdugIxiG6tsE\nwD78\r\n=oMTj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAe+m0twf3yucQZVJOkLekc6jNaPccRKYvbSJ24C3sSAIhAJ/Kc2ZJBkOHKlQAxri4UG+K3Ay7uggWuIpSAwa5TWy7"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.1_1612289644452_0.5185363233784541"},"_hasShrinkwrap":false},"9.3.2-test.1612295949635":{"name":"ts-toolbelt","version":"9.3.2-test.1612295949635","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"af493840c65e04fda111acc4b76dbdd5bdd7f0b7","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek/utility-types) | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.2-test.1612295949635","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-PWCKfg9KDWeuCzGi/ysxHcCFIIi1uwNKkpqiNrALyrKzaKFGajpWksef1r7MFh0ZeMnqFrqdu5xOb7+scdZlTQ==","shasum":"343218c9869a49bb148dd5fe05436785be84ea3a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.2-test.1612295949635.tgz","fileCount":243,"unpackedSize":1977641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGa8dCRA9TVsSAnZWagAAxWkP/2IWWwafMRpm8qOqbH7Z\n4h+y8WPucwSovPHyheXuNEKIKL22G5hPEXsB1rLPo9EonTkxhxKv9D7cIebD\nXAT9B8AxJOGKPf0ShFrVCAlgDQgwvZRCleu/+5X22eh2AUpXEvcxfadHwNFH\nFXB4qrns6H2rh1adM9k5gXyRme9Ililsul72mJ2RodL4gL0cGq0FGSazIxkK\nmh4JCjsAeVPvZRNF5tF1B6cTSUWmxRbAbmWCEAu34hBXC+M+mYvM9otHJP/F\ns1dnBBMUc4C5NG+G9fLh92920mFCphrd3UKpzqDrTnrGy/ZSzLVVuzfIEI3Z\nafkYXk7CTGriAnnOOOMijHaghTbMKS5ItdeuexrsSj8DhQYdkvI89IEjW5pU\nxx+nsW2ivJKBDkBEVe0HZcVI+OJ8UMz3ZrDTtVKbR+3h4sE2O4/mLDltXR1i\n4xPpExLFiMqjOuwg/qQrqa33t7uTr3gNbyGgt7WK+xDWV/n5ObI/BCpmB2IG\nd7ugTuwClrGmIVffTfM88D4hkO8WqfFYKdtf993oBH+LChSSJuxrx2ew0Wdv\nqgZ8WAY1c1pSQrEMXz960XFHQfIxLxdwoQNosoikFFoAqOOY3cZJX4B74OZE\nNgaOby3AblkPzMvRY2alO5NueR0kkcuSYzqVL98+whV8zQnty/vBDExefk2N\nsxcg\r\n=Twqz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEtTzSzm3l8km3Rhh60kZVD8pZ0l7kZJcOg0BetwXSCgIhAJZvPzQy3acVOTpC7k3cGoH4U3XkUHqVkNbGhBBzEBD2"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.2-test.1612295949635_1612295964493_0.9497484354558958"},"_hasShrinkwrap":false},"9.3.2":{"name":"ts-toolbelt","version":"9.3.2","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"af493840c65e04fda111acc4b76dbdd5bdd7f0b7","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.2","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0DJuYL+R2RVgJJv5YhDmSqqqZcCM9y9VLBLLapvY7UYMnqyGcHx/uNnUD3MZaXXtZyqjgeWccRbOL4IG+xAODQ==","shasum":"2a743564e903c18c38038cd750b061be8ed4184b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.2.tgz","fileCount":243,"unpackedSize":1977622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGa9vCRA9TVsSAnZWagAAgLUQAIY2n4dg59ORGoKi9TX0\nD4VHrAeOoXTd4W2qqdIQnvnaXBaWLRSdkIUWz6U5LqmVa2mftd2G74NHXPAU\nJvQ2rYPTw4AoDnHkSitpz6QCJccx4BtvG7V0K+K3ysPJeF6kAu8+3s5tzMD+\neHfdz3R1J1fRaBYOsV5JD7thUFSltbT4ZepAyeFNvvTxKttsMSpeCI4epZ2B\nWombavkpQymhKzd1w94tb4MnImd7/vHcIi+Ot3rGMK7aLbsNmBM25oNhaQbd\ntmMmv0KFVTuc2QVwDeCcDhtTYdTl3nQXS24XF1o8sVf0en359/QJkQ3oT1tv\nUYpZO3/k27GfXvqGwbSdtB27KNbkV8UkYn8VDiw9w1opBFFDRjKhrJAOdtdD\n3Fdd41iYpNZo8wlSAmh00bMxMnbZzra+shs4qjvHL1osaSjSKc0d6BOjCZUv\n9Z2d+0JRNrvgb2ou8RckWZ3uywIDnE09OZyLnWyXlHPZWfl8BZ31bSQAR+Fj\nC6hcwuNOv/ENzl459fYQraS9xfllBLDW54YbUBv2/T6ETxVGqsdI9UOiyA62\nW0relB5Q9Z5jeV+pDVpUP0LSZ/6LTBK+TaGRPVolVHhmLZhI1zCcQKZY4UiG\np1ZpVtz89X+bAvn2BjjJnMeHvJdtwiNYQV0Ed+Eb3xzLLQb7cwGktVOw1YDl\nXNGX\r\n=62V7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIErsPFTIJ1eG4cahfiXLlqCj2dchS3qVO46I/gQ7OiN3AiBmL0367KQOVOD3udgJkwhLztSJHNn9CQvxcWp0eN3rJA=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.2_1612296046797_0.302708467677663"},"_hasShrinkwrap":false},"9.3.3-test.1612296648142":{"name":"ts-toolbelt","version":"9.3.3-test.1612296648142","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"6d8c91e3f637a480d923fb51b2b76628b90fa3ce","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---question.md\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** ships **utility types** that provide simple ways to **update**, **change**, and **compute** TypeScript types.\nIt offers unique dynamic features, allowing you to write type-safe software more **easily** and in **less time** than you do today.\n\nIts programmatic API brings **new capabilities** to TypeScript with **+200** tested type utilities. This makes it the largest and the most reliable type collection out there.\nIt uses the type system itself for TypeScript to compute complex types. So its API exposes types that trade **CPU & RAM** for higher type safety.\n\n### Goals\n\n* Answer the question to **\"How can I do this in TypeScript?\"**\n* Provide a programmatic **standard API** for the type system\n* Promote type **evolution**/**reusability** within your codebase\n* Software that is more **type-safe**, **flexible**, and **robust**\n* Bring a whole new set of extra **features** to TypeScript\n* Extensively tested type utilities for maximum type safety\n* This package aims to be the home of all **utility types**\n* [Answer questions about types and share knowledge](#good-to-know-)\n\nYou'll find all the types you can ever need in this single and **well organized** package.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from scratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and understanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your questions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is pushed:\n\n- Tests are run with `npm test`\n- Tests against [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of TypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek/utility-types) | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.3-test.1612296648142","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-EvzNpPF+OfbARqXIQQhSlpXcyXf6lMYnNMJv/F8JvLGQWRcS2KTVvRYocj4kFuczW10jLdkAu5Gk9MWrQOz7fw==","shasum":"3785d6905f3f18b1bcf5f6fa69af12b514e96780","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.3-test.1612296648142.tgz","fileCount":243,"unpackedSize":1978231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGbHWCRA9TVsSAnZWagAAKCsP/isxZOi1KmWZugFY/jJJ\njarkO406kRqcjhR+rk9obvozLsRMHqd1F2dotJIakjGBkBHgNhtTz9CSoMaa\nlztVKpoAPprT68oYA8xvosen6GXbNzRoMYrnOriE5RJxZdfGxC00Pv/lxiPB\nSguJgjovttaoGepd0SJfbTEsqRDZczSQVop3knfsXsK4Ta1iJqJbDZ1MypqO\nIFyPQ5IpWVDBPex0BolgfYAj+zb163vQvO6a+7cUSRcFwiNfJEQixcDrHsZ0\nKFe9bABVXFEkaB28xuoUd6iaT/Ek2/Y9gtKhyDIb+w4B8FzTABnW+mTqRCIr\n13azGM+UwOd+oMPGysND5eJKEcT2gU4OXJ7dGZucXX14jJfP/13Nlmkc52zZ\ndMs5UvZ5x5gwG6b8KccmIXN8e8gbgzEJiVuWCTu+a+5S6mB1AyjAqymIcYn2\nUEH/YnBI7i8zDi3O4kzPQXjLQjDmDlpsVP0Sorv0/OR95JWUgRzsUdzXJSsX\nyGHkPDifG2+JACPJk5JUPmrIMUOCya9q538TwOj95MDtZBZF3CpyIis7fNAG\nrZaWmOqJF21iDcZ8a8u6OZDHTIchZf8GRykc6Cfihe4HygqhEB8rP5F6/583\nryJhFg12Cbc9ZoKXwHyMjs5LXs3j5LcEwbTqOOv4R/2a4fr6e/o+W4X+e90v\nTkZb\r\n=+eos\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmJRRo5OttMWM1Ny8LKvHENfFTYwuyc07HdIvL6dk44QIhAIc6HxfqwI3cSvpdiFR98QcJfu2HxIvD68Ib5oZErPFf"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.3-test.1612296648142_1612296662367_0.7264166587369882"},"_hasShrinkwrap":false},"9.3.3":{"name":"ts-toolbelt","version":"9.3.3","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"6d8c91e3f637a480d923fb51b2b76628b90fa3ce","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.3","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/F0ehczltJw6ua2qLL2Htb9okemE0NwQHuR6BkOJXkuU3E7r34/g6clBdE9vM58kcgqsWFq8vI959eGcpPO3Sw==","shasum":"68264bbfbe1920b09ef6f77ead8479eae2924612","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.3.tgz","fileCount":243,"unpackedSize":1978212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGbIwCRA9TVsSAnZWagAA+MoP/ilL+J0/Nm/uJl/hdRD5\nA0XMgcpAUKDzAYbiy/HtxvcO2b3MNirA51Qr1NDmsoi5gksYgIqkEbk86L3o\nGc3Xq3v67vlswv5QBmNiVllXC7dksoKOEw5t/7xQF6ToiOQOx1+4MxxnXjOf\nRUcZP9I0pcmWNhbMBTiiLToaFrUsEce4KsOJGwzjuTxfHGPBS3Q4Z2YWYyoc\n9u1tPJwNYOcV4OuqybfiI4C2Ke4u/rfM4/qEVRZp9vBpqXiqXPjbcz3/qPEs\ndDJVdpj+92bN9O0u/vMoQxHF9WdlKCT5C+cjBRsPrllCjeWw3lN49mCHU8AA\nSg9bKCzX7UB2Y7F+SNBFyfq6Ug2TifjVqvX7ugsFz2OW80vOoGuPSWs+/DEH\n6VuqusW9cgcZPoZwPEYOg7FLc49e55GuJduH5pT1q2r/QdyH/dTlX+MWkRAk\ngNT6UAjfchhlv3nGMpMvd1eFHl5403GjMnc61wG/+14tneMJwtEt+TCsueox\n1wSjhzpz3Z9RoSlVpB610drVY+XFtNUzckW+/R2q7GPvA7g5P3kQVW0Kv7Om\naNW8szRA/KtZC5Feho0aUpOZ1u9hxEbCtO52oXX2GIfZUUJj1nUS6iwHLUWL\n+FSNlOAqrimG8i8P5aICo4lDKDkdq60bmhety3N57hg1xdlDC3nqoSYe8ACp\nQnUJ\r\n=RW0B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGbNxxAtqcnBsCi7+sN7ky9VjZcTB+LBzwIM9bwDnaD0AiAUcm3fn9zsCUJ7MIjWtbajduCrB38Cbhvokk3LEEGuAA=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.3_1612296751667_0.38877819586513795"},"_hasShrinkwrap":false},"9.3.4-test.1612811820544":{"name":"ts-toolbelt","version":"9.3.4-test.1612811820544","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"affcd7a8ebb5466fa5f1dc9a0178ca60e9c98f9b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">*\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced generic mapped types, conditional types, and recursive types on the\nmarket.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety - easily. \n\nWe are just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to generate, transform, and create types. We\nabstract all those complex type checks away for you. We provide a standard,\nreusable, and simple API to achieve greater things with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on union types, object types, function types, and literal types. It\nis coherently designed for building robust, flexible, and type safe software.\n\nWe answer the question to **\"How can I do this in TypeScript?\"**. We are a community. Everyone\nis welcome to come ask questions about types. We welcome beginners and advanced\ndevelopers to come take part. **Welcome!**\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\nAccess older docs at https://millsp.github.io/ts-toolbelt/version/\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://githubcom/piotrwitek/utility-types)  | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.4-test.1612811820544","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-E3dm1Ue7x5Du2i6NPcmJBQI0VPp1QfoCc2cQXZMNPW4ZoI4eSFeM/HSjt2ZWG30hoFB8WovG3lXZthj7sElETg==","shasum":"abbf21f3a3ea6d5e3dd0db8f7401645ebf164a62","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.4-test.1612811820544.tgz","fileCount":243,"unpackedSize":1979323,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIY48CRA9TVsSAnZWagAAvBoP/jurqWeSr9JliS4giv4t\nE4VaS7l4OrKYkxJGR/prCcOtLhC5+IylPonoHdu1kad8FsSqca7GRTBJJSXd\nReoENUAAM5eCL/ssM7x38AE7Q+jNpXPo7FgVnU4tNAzF21Q0OcEATaMQRnIC\nxmJl7GxtT2+8Vu7rQ1FxHs4imf3ogOrecz3ly3G6GrOk4WUfi9WihZyqGrZw\nZcF9K6wxQOdJYbg1rDvTaVDdr7ea9dHRcnDBhW536/AsGeIBj4f6nc9Fwu0M\nglS/J8j019J3mACi3xxOe6LgryuAdpcWVyUZE55+Bx6syd3FBJL0vPVUG2Yh\nrjm+HIh9MUKpyipoYxAA6yJI8A1QIv9Q+i1zLSj3lw9OyfQDheAUydN4LQwr\n3HBRgaTynV8R0c1ZCAKmhq3AlKTRGW9+7lFOcvYO+4jlRsGNopq/BX2Q3I6b\nLu3xfi9rRKhd1TE4b+SapvzqF0RO7mEHbyLGCQRAzfmZNzoWbjZgMUHjgHP1\nc4CHhx4HWBpAMD0E9tgMlxwMFoHlO8VFLQuFYKYzua6mxJys+T/wmZ8NTmFK\ngQKva/ehpCW5wRyKRDZbJcBePROqzftPyzqYS/sPjHA9/16xyl2qxKzu0xBC\nBhxzwvqo3aLiIDSjDjrb8mb2Ip4H0s3hDYgIwsP3oBfpRXvqpUaxRHtlS4Yk\n1eRx\r\n=8kFi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDOsmNvV4dQri3aT5gW3kSkU50Jhq+/WkyYgHC4GzWnBAiEA+7rvlouIyy23V5S+FNx4IgkcCqRuKrPFzyhvAF0vGn0="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.4-test.1612811820544_1612811835954_0.5106040097604196"},"_hasShrinkwrap":false},"9.3.4":{"name":"ts-toolbelt","version":"9.3.4","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"affcd7a8ebb5466fa5f1dc9a0178ca60e9c98f9b","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.4","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-3ODaQ/18o5go386GxkEFv3+nOZ+qRE1OzA9sOdCJ+3YUJjoSwM40RqsesB6BhQ+FNvfbODBHs3zDobymGwpJNA==","shasum":"e80ff86b8c75dcd23923a7c90e8b4c07acc74b37","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.4.tgz","fileCount":243,"unpackedSize":1979304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIY6iCRA9TVsSAnZWagAALCsP/R4OEaxeGYvR4T6pvL+P\nVsAWn5DUstv6gBPqZ2tg96vQEj+Xi1NDch83aeU+jqNATYzL8jIcJOPKk5U1\n1GE9K6jU29jcJWsICeVVCRhtIv7MjWl6q2BLkmQ9oIDNGQ+2jNtmddyu7aoR\nT2w+Q4qrlj/rX6uOBQYqPEP2gzD8FihC6dcJpGC27J6sD99C8rrt8pGPV8Hv\n+bskS5szRPsDKyD2BOclMUd3QYiRLwC4MPg1UjUM30YsvYswbBW6mzDHr0we\n50sETTXjHIm802qxJ251lsUah2rUIDaU3Drsnqi4KBaYpj7kRbs0yQECDmKg\n8DvXOHW+y1O2PPx3eZFk/GRfzt6H/HnaqcnwF35c5ONDFvNiozNZiS+EbiLc\nlA1gD+Mw0jFxjg1G8pYB5Y5qR1QJKEShL7yBGN8lFGHW/gkf27XOZRaYaKz7\nmgLgUeXXub0on87tnMBCI70cpTvtg++iJXN+sGzFdd4cW5XWTaub50dqd876\n7UPU+ST5dVh7AIPQVbXH3eWX5DkTYR+Jx1TYZbfhSTciU93//Pp5OzX2Llqv\nuaRFmuUv31u4/W5wnpXWPVtxjXhU+teRR1Dfc1zoT6hxMrroTVVirmPMbqJi\nK/t1FCTXfp2Q2gxc+ZGEY2N43jbogZDP6TzT1H6+QLaZYLnJFeX7T3zS9hld\n0rsA\r\n=o1IO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEuCWu9Bpel+FiGu2m0Cui1Cb8gI377zY6pmv6OmLhVhAiEAtoee114CIMCzSjlw4jBgys8qJHY76fdp2llgO2uYyGI="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.4_1612811937495_0.3628760874609793"},"_hasShrinkwrap":false},"9.3.5-test.1612812690709":{"name":"ts-toolbelt","version":"9.3.5-test.1612812690709","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"a289444f4ba291b560a8eff9344bc2f001a07009","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">*\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced generic mapped types, conditional types, and recursive types on the\nmarket.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety - easily. \n\nWe are just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to generate, transform, and create types. We\nabstract all those complex type checks away for you. We provide a standard,\nreusable, and simple API to achieve greater things with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on union types, object types, function types, and literal types. It\nis coherently designed for building robust, flexible, and type safe software.\n\nWe answer the question to **\"How can I do this in TypeScript?\"**. We are a community. Everyone\nis welcome to come ask questions about types. We welcome beginners and advanced\ndevelopers to come take part. **Welcome!**\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.5-test.1612812690709","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-8OFWkRbKapRfcyEG6Hd7P8HSiay7S4fmbj0Z6oaBWpH64ZZrGGnvh8R0w/S0+4wEELsHZVQzjyzGAJijVGKqaA==","shasum":"2db7d9bebe766a385ece9f94bb7170344e99dc86","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.5-test.1612812690709.tgz","fileCount":243,"unpackedSize":1980638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZGiCRA9TVsSAnZWagAALTsP/j+LAmbUE3wPMBobGZBw\nsLCEiieMKaxiyNvBCjYcgcS4WCsvcTGoKyby13P/HwB5EIZMS/444UsNOB+c\n7yXURH6AT3a8nK23WKbeJrpZk5WPFJFA8tfzzhh0/UjVDx7ttTQZqkZLj1Gk\n6V1SZcCsoz8o4Ae71FvjThWRod2EngnLn/12KJJnEz/LBLeqKYcrGEo5kZxT\nmYmBK7q885rHrj1nhdfgw4OlqQqKjkM9CywH8JjOcSpL1bGVDxPvSh2F/cth\nxKAmv78H8177pNeSDXFR8Efr0BybfQdNwZJYOwBYpJgARIgaaZNMenYIMP/A\n+aqMsX1pIx0vkYkrZY90BwIVFQOy1WIa4jrtTvcl2khEDWXbrNz5fi55HOqn\nrx3qfPjK+D6BoP3IFarkohqsdrVTHIBkZMsESAHt/pVudyvzQWQcbr549lm3\n+DJuaAdtrOBc+i2HGsJcXklOHIson4W9m02ixkOMRZaZ2I1hAbooRDeFGK5y\n+SdyzAiALoBBFlxxu3uyZ0mMkaQ4K7VBAoIrNV/jSUWU+J29rC51CTj+b0JE\nuVGcBGM07rIvIHwetQi/ZZUU6h+X2tqvG0vEt0L8ohVACmgWY2mp5X4XtVBF\n3DSSHko2Jl6OXA7xxohbAKb2hjlOAVCyzb/Y2Jw41yFNIuSkH7LgRwo4RMdm\nN7Nx\r\n=UAbt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9MJFI4jIbFSsfCrG8kSlYae4vFmmHF40soC0svIzm2AIgJ4m2bpz91WXEE4eLPc2i2HXg263VPZ0Fi04wqOAoAUY="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.5-test.1612812690709_1612812705592_0.6877823769591251"},"_hasShrinkwrap":false},"9.3.5":{"name":"ts-toolbelt","version":"9.3.5","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"a289444f4ba291b560a8eff9344bc2f001a07009","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.5","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-JJMqgtV7LXCujbXcm8dSzgoy8TeWluB4igVE59D1t9QSuqOYJNygLuqhpZ2gxsxj8mafIchfULgHT2LOiR0Plw==","shasum":"bf371049f5f1ea9d89f3fa69b8f6d70f6ab4b3fc","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.5.tgz","fileCount":243,"unpackedSize":1980619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZIMCRA9TVsSAnZWagAABKQP/iC7apjCoKD+EvMsMsC7\ns7GmK3S73Zj53tFaqJjmUb//UOBe3bPeS7aCQHJm7Wg1osPzX9wEJ6dA8kV0\nqdoTDTRufNv5n2VlfdjsbMcrfd/yksH+Ii2Rs2skVOcx5yrrBgBGtvurWCzK\njCsj26xNmyGSTFmPR3OrPgZ2aKgMqOhudYGGkgKBXp6iLl8Q/CVCcw1bLsHA\nKfSI6u5J5sSYSBwDtrnncpd+Ojv0WtuX3elK/1SoyTNDm25ZW3eBViLStA4C\nK+Z/5vMeV0mT7TI7GPvtNzh1CKxvkXqn/N0t1UqDaWfVV0xkID13DQgHxYot\nr7snVXKir/daNvcE+Koh9GwlRKl9IgtPv6A+7EzEMqOOZUzIsV2noN9gY03d\nE78ueN/Q+pOoE5ibZ++imc1F7IPzMqfULFe1aQXuEk1ZDBabor+IpmmI86Al\n3Q1aqIPtRmwtX7KiPSuirzQPMCt61W4JptlCvkL7nkLB+bmfsOwivmXCEymL\ny69h3egg3PZPmQfJRKQeLVLHZc6ghMI43koI5o9L2hRSVVnxU6J0oDRFUhvO\ntX6aGE146NfSKkBeD44n8ilhfg5FuCLfgCUb5PTdVWu55/a5p9+EsJoaNTce\nZSfjoUzgt/Fnd8V1FHbUzqhuExW/9JQau2HMZOcnCgtccVyUCgzo/Pv3TWGq\nPQzv\r\n=KgGJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBogEDZqphxNWDfbt4mcLSlk5ZRnHvt8Zf3J90EPZ0rwAiEAmBKXAvbRPOEtRdt2KFNn4aPghTpEzXnjcuJn7zqbNlc="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.5_1612812811758_0.35678563232399707"},"_hasShrinkwrap":false},"9.3.6-test.1612813388212":{"name":"ts-toolbelt","version":"9.3.6-test.1612813388212","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"a4d6ec568c889a5dc61542db2f02ace26259d38d","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">*\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the\nmarket.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to generate, transform, and create types. We\nabstract all those complex type checks away for you. We provide a standard,\nreusable, and simple API to achieve greater things with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on union types, object types, function types, and literal types. It\nis carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe answer the question to **\"How can I do this in TypeScript?\"**. And we are a community. Everyone\nis welcome to come ask questions about types. We welcome beginners and advanced\ndevelopers to come take part. **Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.6-test.1612813388212","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-i+I9h+lBalFypLWjzTqhmIagVblgHsruqIK1tD7U8GyZw4ZyjtFJNrWj6rEHJ8E8UD8OOCj4duXnKWW+s5AErA==","shasum":"bb19748daa639452e24f19c98c58f5dd359da69a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.6-test.1612813388212.tgz","fileCount":243,"unpackedSize":1982240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZRbCRA9TVsSAnZWagAAV7MP/2jbAnqBPPkIN4ATALbo\nHoWkN70/G774w+x74Ap0ALvCJHs141Alj2WMRckc9DhaBHJprZDWEHLvNSPJ\nqkQKu8rGRmnAKVd2tqD474sSCjzhmk/hN5jBywt1YVjIiLjNcznK0zQ7PffH\nwK+7zNIhu2MrcOdEwjitfgv7/E8TSEjGcbw9E29YfKwLHTnwPJpXIz585GIb\n8K2+RL68WGeWhaI0upbLRhltKGACOrm/2tzwPeGqf2rpNBhQQxDz96bdoR2i\nLmlgKkRESlJvegien5jvmSjsfYFBb7yyVXfEKNVwzVz2KqCd05xq17GsOUAT\nbMHCKoiRhyHmX6vVh159ZnrKhjrHacwdpVNWPWFPdrVsuKuiVZoKuT/Xqvnr\nIBFaZk7XMl1M+w+p14at3s4o+GtkFzqDGM7g1dPWtilT6xDpF4Rx+9cgXQms\nqh0TlqgHczPooKpKC1lxkLdGTaVTcE8yMrnHvAe1WV7yca4GS8RDDeb4iDbO\nzm/3CN0NFK1sI/7fy2i8SnLVKQyte4zvtqE3C3jXL9KyaqvBcRQyXd5qrUn9\nd0xJ2b1mPxQ2i9cqzlyszR938qyfYgDI7GGheiffrh/n52WBDGcjN5d4aVAj\nva2DyRJWMtF6WdDFeJHd+hMKbGMnV0FYueVGjvXyqZh2wohlgZCiYpELP1Sl\nHZlg\r\n=3zSn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTv3xFCpO71EXRejw/nPPBYCp3JIAM77pm8g467fI6IAIhAPXk1JsXLjndJFM7FfyRSCRDDepPmzaV4puTtK8P5RMA"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.6-test.1612813388212_1612813403017_0.06797650716580428"},"_hasShrinkwrap":false},"9.3.6":{"name":"ts-toolbelt","version":"9.3.6","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"a4d6ec568c889a5dc61542db2f02ace26259d38d","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.6","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-P5MGsbKdcC0oiZUKaLYflcVxPMbL4zaPVLuYKJDtDifRNg0RubhYNSTfz09Bkz+BAUh+WJPQP9Zc8bP75O3tFw==","shasum":"9af65002d7e5c4b18b8368fcd6e95e9bec470c06","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.6.tgz","fileCount":243,"unpackedSize":1982221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZSyCRA9TVsSAnZWagAA2MgQAIsIzVJ9degYwC8SjJl+\nzuh3Ad9d7l/8u9+r6mShQaBwLw+DkxxdMlPtKHGZMAwUFlhzodv21Cvjs9o0\neT5T7jWxZ2FkVoBZ096lalntyTieWjDGynPeSi1xAkI3S4dlltF3Ysex9mEK\nDSxoV+eB0yvfL4WXqGNIe9vJuiz+F2WJkauiMbZrL5hUlLFQ+fFL5jQ+4bIP\nU0N1h1EnoHQoGCBTuUIQIQnLf4Y2peknNndPSNHQaegq5SVbwAEIQ+uHwkjZ\nDm59UArz964nQk+RFW6olhx65vD5nKJOcT1HhA5c8zktOi+TTTCtLt721e7e\nqPADb9/Nh9b051hgTtd17tdUfTY63sSuYjJawg+MJRvisGQDuBNlUvx3VYcF\n8ItCjHqD9eUh+8uoRFTTCbQOlBymmuMF0Y+wlpY4oXAFvUakSELzZMDhkbMb\nX+kfJxIj/efOVY4eqrj3W8SClqf+9kFxGybwzowgW8RE3U2JWIZpXb9JekaA\nl7PcOyU7sE4BUMrf7ub1FU9ttAKaIRfbTGvn73P96VeAXmHLEF0JoRrk2kFy\nfMKoPJkllT+bCJmpuEnedbrw3j3YmUzcV7QcZ5aNGrgXfvIX+OwFJp9trNNb\nvHn+Z741N9RRun/S3IFnpkb9najp4JFvqXWfGy374J+ooHvZBvCbUPH6GaUn\nQjOM\r\n=BX01\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLLjkzPudRmP5TyjxRToKFX0AdGK3zu+p8B+uAh/vS3QIhAOFj7dKwesnuQkqB//SnDvoKp/+r+QUqwKnXAgUfUOUS"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.6_1612813489434_0.37686064858173607"},"_hasShrinkwrap":false},"9.3.7-test.1612816247761":{"name":"ts-toolbelt","version":"9.3.7-test.1612816247761","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"1656883820b63b4d8885352f9c37a09b1a120063","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">*\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the\nmarket.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to generate, transform, and create types. We\nabstract all those complex type checks away for you. We provide a standard,\nreusable, and simple API to achieve greater things with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on union types, object types, function types, and literal types. It\nis carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe answer the question to **\"How can I do this in TypeScript?\"**. And we are a community. Everyone\nis welcome to come ask questions about types. We welcome beginners and advanced\ndevelopers to come take part. **Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc                                                     |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases  |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.7-test.1612816247761","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZSl4zJ0+1pGtycsIf/27H1h9ZekFXyKyhj7KN2IfeSMqP+dVCA5l6+9hsWFLHdHFYoU2oVcLSKW7bTyjo9Bz5w==","shasum":"199d65438ac0d42a3491cee21146273fab5c808e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.7-test.1612816247761.tgz","fileCount":243,"unpackedSize":1984068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZ+HCRA9TVsSAnZWagAAg5EQAIca/t6xxf1HsQoZC9cn\nhMQb0S0P06Nz2zxuIwqdqGstHnGwqYNUtpzpvZO0/gDoKkqwUpdGlaRXbICc\nnGkJUO4Nyb/BvuBNDFeFVs10ylQPHAVfsXJI6mdrQPLZjHwlmcbAejHUyXvK\nAeI9YnrwahNJy5WK7+SRL3Qm98yScK40iJaa4DzQMPN/wnoROV9bigT8NDMX\n2A9NA6LCsVSsWsXNoqLq5w3Lbi4mZa3U0rxHMcvz8DDLyvoR7aPaEr8OYHlx\n9OBwy60XwN7NKgiNzRNj7YCH2yzXM12Fpg3pgxCEhUalgmlTwPI7RMeltdjb\nW9GC0kJZ6pKSReHQQY4hqSN0Kg5qRAYUpCznmdz+Lb48ZsISLWCcEUI0FE0b\nOQ8zm2Rz0MdNVJoR8KSLvSXcM6im7xUopNxrfBHrBrNqebxZKwLi/BkuKMGn\nzsCDPpQM963ikgY4//KXY0Km+4Ikbuymwx1TCXczGU+2rbdKcVSEFN5QbKgJ\nr1uU9QGTq2FIEA6MoMtEkxgW5EWT8Hyb5A8dO4R7l2Tw8cdCSRTfdZ3Te7FD\nYjGxBhn++CdZ2V51A/NZFYob6IxysAn8hNP/pcQkUeqgX8wEJHiAax1Z/uXg\nhEw+8NVcEq/K5VR8vBG0PO+JPEVkpNHf9hSV1UMyWAqV2hgWADMkRTsNj/fx\nulDy\r\n=+kNf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICgUiaW4ANedukdqh+xyJGToB0+VfNchgQST5Vh9ocJRAiBgsomDxEaKBwFCC3SKduLo3tZWJo0ul1R2tZrGa1ZgXA=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.7-test.1612816247761_1612816262558_0.8435902124332584"},"_hasShrinkwrap":false},"9.3.7":{"name":"ts-toolbelt","version":"9.3.7","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"1656883820b63b4d8885352f9c37a09b1a120063","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.7","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-n15YJJ/eMFp2BVz65amHsh/NLYeeNwbTknmtt+vL0fEojB9lrlSV/JBh8CulaVclI+wd3339ju5hQozGQfetTg==","shasum":"9cf78b52d11d5a5d19a0eaf2235bb5e9b8ff7e31","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.7.tgz","fileCount":243,"unpackedSize":1984049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZ/eCRA9TVsSAnZWagAA4oQP/0aUDPRBjS3dkGlfD9HO\neS+jRw+Pch1SD/+jAkFb0CBjMwIWXZQ9eaRLq5Jw9Wf1LiCy7T4NDUfZcG/Q\nmIps3nrofa6IJwUmxPyUNPlCmrC6bgmyA7szoGnqXazSUpD9gNcmLNeAdyfO\nCd34aRHuExIJoGv5bihaYkUKs/Uz0iCzUswJOiXXsNDUw5c2CMYKIA0MuSkz\nQ6M58lXE7cz6R51k6spWltNCG7FEOnCBwD8z0A00vt2xjM746e/5cVQVaBux\nWS+5yildyfiR6ErrSGCcJDf18Vr9vrFqLTzSxjSVEHycSVPvIukWuDNjiBc1\nSqF2sX0jTdWTeKWqJXor/7DFyWBGgo5o6XBQOm0oF516/fyrgbx9A9TtNlpE\nT/H1n6JDbSDVSptd5U3fBIux6vFE1oM8vjleFD6jxZzXTk02x5lROCZ9815u\nkXnRUWjlpfkf/J7EYJmaIzHPU4ue5Mjm8zL58w0K6qhAZosutitriLSNZXHd\nXFy1GT8xC65YiDPTlB1bY4dgtnBpqBxVCxd63Playpkxh/N2Yz3WgxOnPpmM\nwTNZDjiOnPZNMffZJSPjE9DE+Co9uTaStdGQuIMGtdaMrQv9B5hucR+S7n0m\nI5+x2BMilPz0PPnP99Q0ZRIYznQ1hN1JUn69b/CFqxN5d7jqf3kpCFtlMDFV\n+B7M\r\n=72Yp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIErpH7hkHM5fs4sJar140bT7z01xnse4apCsAS7e9XXsAiAzsftNO9Q8unK609j5oxYUjn70C15IAZitDjVk0GeHdw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.7_1612816350142_0.00016617007909447423"},"_hasShrinkwrap":false},"9.3.8-test.1612821602557":{"name":"ts-toolbelt","version":"9.3.8-test.1612821602557","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"52dc128fb3f8c88915313691e5ae90aaa067440a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the\nmarket.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to generate, transform, and create types. We\nabstract all those complex type checks away for you. We provide a standard,\nreusable, and simple API to achieve greater things with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on union types, object types, function types, and literal types. It\nis carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community that answers the question to **\"How can I do this in\nTypeScript?\"**. Everyone is welcome to come ask questions about types. We welcome\nbeginners and advanced developers to come take part. **Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.8-test.1612821602557","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/B/u+rRrItDNjKsNS1ZkOXTl4wjaAeJnpCYzWSME5KPeLTcjHcAqiPgcDLfSVzHoHib74d2LG6By5ky307B/LQ==","shasum":"60fc6c38b5670b3bca121e86c8a137fc58ed6551","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.8-test.1612821602557.tgz","fileCount":243,"unpackedSize":1986281,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIbRyCRA9TVsSAnZWagAAihcP+wXGioNbcykbfJ/SiJ9n\nF+zaAAUZrWyQaeWGj35S2HJilhEdFdi3JFxJOv3INbfIxMB18jSWiPjI5wHM\nfdFQC5tr24y/AvtNcgC16FZz/4NDw52jYn05O+ae79IPXHtBHYczXUCSpyPI\n9x0vqQX7F5waB4/ti7XaU+GZPJU/MLsCZV/WBUxvJVMFN++6X3vtm468NxB+\nr7HfI3KphOAqZFsbdPIdh46zG/2mCz96hx8rf+PoWGC6/CQmrdObUN+a4WAb\nvY8rQ8B/17SK2jX3rtjTMh87m7V4t2hFn13LqkPwbTusP80aSACQWtlPFMOo\neJ+1aPh9SbXCHZ/l2Ef+SWO3RXURdC/qBqGz+HA4bvsnXELT/li0apXq2LF7\n9GyHOQpQESoynUNr+kWtvYL0ZN0AQqyHMA33XH3hrWuZ3AotHZM9aOgDN61j\nr9TyxRen/gWZTCcHxugoyrZmYkwAX2sIvVDCaoxMPxb/rvptbOAUOBZQy9y0\nz7y8lrFEkwV8pZo0jPA4PFP/h1A8QVSWu6gJn7J/CH9G0plyrfAR/SVXQuVG\n7uT8AR6AvFjkCIICc/sa8/1qWlXM8kpdBcbLeNEybfOJH9qcxNx/loAVjidV\ny8ZhQ/H2J5kloEMyKasMAlbk8GQj8yi5/lxvUFjqKx+XGTs9OPwud2oiA80x\nQKfo\r\n=ehH6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGkT6N9WaDX4eHdB09bEKnomgc3XvfI/BMXudfe7/M1FAiEAt1msWBrjGAYehR9cr1YUylWYtnlgvnfFk6lEyDEUs1Y="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.8-test.1612821602557_1612821618049_0.34097959683909984"},"_hasShrinkwrap":false},"9.3.8":{"name":"ts-toolbelt","version":"9.3.8","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"52dc128fb3f8c88915313691e5ae90aaa067440a","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.8","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-UEKfdOt7pRpSYpL+Qz6cUklmXXTLJxfhrw/FetErKbXlF04ow5LdZuCDu7vf0O1nSr7ws2ab6KiKPYDRTqVb0w==","shasum":"214d4a3a1bf16221064a9a71c66e54481efc7e52","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.8.tgz","fileCount":243,"unpackedSize":1986262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIbTJCRA9TVsSAnZWagAAOwMP/A0Vz1Ah+LsU8QdNhzuH\nrX0GhgWHP5MM9p6h6QNGvRLp6GUHZX9C63m9tfb2Ul/LSg2Ai/MaTuf3ScOp\nGAWNIoQY1ZmNuw/hmtpJca7tNhVuuUtPDhcR5P7lxmlQ7s/HAo43E4pj03Fz\nfJP4aBPqy2ZMmDld2oZQSyFxSkuxOeiKT9NMUlN7uGCbNOJ6bChfl/51Up9C\n8mlvB9AVCL8k+VMJDA+7E90eNF+6Nq5AkNc5sCZSTo54X8jpwkdZfi2xka2h\nBHkvGNywD5SNR+WjcgYaiZghzt34XEv6krrztxaSuOMo6N4T9qr+6l4sBLCr\n/Rr/dOMJ9kTUg+zwRb37qB9+S6iCzaK6zduNyXEMqHvB8Jce0B3qeqtSRxxj\nCZRPAGLPEP8drpspGwhZLK0PIzjMXU+uhzLqocE04055ymVvGZGBXr4Ouqsg\nkZ4lLgKq8hq6B4VKelvbvABzZUOBjWRLMhza/LPghcTUp46K4KuBcTyCMKPc\nZ8ZUtLPRf6KGx5YrcYl8mdg9Nk2ZHrsfWm3qCzOQ3o/Mn++Q94UHPj2qWlVw\nZsZjBp9e7wbUmHW95XdNzxmWVS0sgMQ3RxXTW/+PGZBCbk9HFlUJmK0yOxjt\nJTJIqfriGcaRzOJ2hRYbVPnZKZyWPsTG5GOnOCbltaF4rbIH7KqcuKc3B9tJ\nSbsw\r\n=7D0h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWiuPFLcvQWlABy//uruCk9np6SaY11Gl6XJC6QxMbBAIgJPelLtfoByaPMgvIUc6sZmYPFsjRYYfFdUR1V8U33wA="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.8_1612821704834_0.42148322273143357"},"_hasShrinkwrap":false},"9.3.9-test.1612821864161":{"name":"ts-toolbelt","version":"9.3.9-test.1612821864161","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"ce26aaacfb554af7c7203195e103eb27b7a4d0c0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the\nmarket.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to generate, transform, and create types. We\nabstract all those complex type checks away for you. We provide a standard,\nreusable, and simple API to achieve greater things with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on union types, object types, function types, and literal types. It\nis carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community that answers the question to **\"How can I do this in\nTypeScript?\"**. Everyone is welcome to come ask questions about types. We welcome\nbeginners and advanced developers to come take part. **Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Plus<\"1\", \"30\">, \"31\", Test.Pass>(),\n    check<Number.Plus<\"5\", \"-3\">, \"2\",  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.9-test.1612821864161","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ych2a0XI27tMJaQov1wMPKgh4x7tdTyrig0Wo+TgwvCCvrb54rcs466cUzitGA7CTN2jFy3SiJkpKeZAUV5Y7Q==","shasum":"7da70a0f8fb8d636c63ff9cd9166e344d02d285b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.9-test.1612821864161.tgz","fileCount":243,"unpackedSize":1988565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIbV2CRA9TVsSAnZWagAAxYkP/jYpZcHZPUYjUG9sbkYj\nXz1e7wcj0kt7WfPEoCveurlgJzCcVGAmzFJIHh3t8LtMI3LF6Eb13naB5/AV\n4dqAYv/7vzRO6ZMY7osn0Fu0ouBAGoRAiQ3lvewlQNBw+mby8pnkzCoc1ss5\nNoYmcAyB2rmJL9PCZ+CRtSLxNXFs9pgGKsq/X8qCHcWMioI7c1naQKHd21ev\nVUj3tfXqsplLQa7FF7Mk/50tMueCjUwrk78+n9Wa03e2B91VzoJVt7gNlBou\nYioxttjRy6WuUvnVF/qfQuEp/7l5k6ttd6WtK8F7BjPcZgNjhDD8prys+dgk\ndHfVXBHVUzZc0rUFW00XhrROkBAXYopYc33EUJFm8GCkaW8Hnn7rcNG4uMRf\n5w01stxxvcxAyK1xQjaglo6rb27bTuWzXO9S/RHwxm3cO4haneP6geniASvB\ny4//ksSFfS8c0K+BlKKqSVRjDCeqLFzAqzGe2KVsGbH1QOibbo9kOm9iYX76\n99hGYhdgDBAkZIsEJq1znDijuzyqc7rU72ZCPuGBKl981B973PTXsLvuo9/M\n/Zbf+4DCtRkvs5t4CtijGmFj3epWtOK/AxinWe9aS8WPPJycpM+svC6HxThW\nRlUzrA4diKuu3pZBMmTxjkPrlfookgLaSUBL6faC8D9fDbne1RNxCywYlDVy\nL84h\r\n=HMcg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDKyXbWd13W3aNyie2JoF+MGu9PD5m5dazfQwFKhM2AgIhAPmhJgfJiV1astOx8Yk6KWTVcgK9j37Jbbvc96wtYpde"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.9-test.1612821864161_1612821878052_0.44013214711656357"},"_hasShrinkwrap":false},"9.3.9":{"name":"ts-toolbelt","version":"9.3.9","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"ce26aaacfb554af7c7203195e103eb27b7a4d0c0","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.9","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-imKMwkIIVDE3hZoiohoMa/TAzgU1Gf6snMUESG6BmCI/MA5V70dBAmWasvywrI8UXIll8WCHQ0gbW0D0lQk4qw==","shasum":"c3ea11d83d17c4a1407799816e531f10ffb1e89a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.9.tgz","fileCount":243,"unpackedSize":1988546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIbXTCRA9TVsSAnZWagAAmtoQAKDjJSm37fRYV8Dwn59W\nZT23gX4jLyuJR9WFESNgDAYfHtF0h85UTyoiSDaW5y1R9zsYZUXHZ21ZM5pG\ndnVNWHhoFRDF+5ErqiTl4aOxjETO4J0nXic54lujWQsUTq7rIk0jT1efYGHy\nE/radFuWh918nPcJF4KsW/O6lw/OecfJHIbkaF4SdJAE2y42BjwFq/uuhGFP\niAn0Z9bWaR/08SFadtQ5CYW9UMpsI7GWrIwBLLzbrwVnTp8si2IavxCgujfu\nFUbIHzkO9+ntzIvG3bcdCsZoa4z9rae3GcUuT2b7bPvCVS3HmGITMxwlXXM4\nFvQvpxgscvkpnXkB5i1hnV2KWT1m2dvq402D4N7KOOdx+I/5Pg9IIJxCSZy/\niuaEx0WLl0pIfKNpFkIoZx3NiDxriz7tdsBY1hTE9Sv7fa+43jO5qy3SbVK4\nn1jKmdDoNJKHw41Ox05ElJXxqRAoy1wxzsijK5Ccg0BB8pEQhDur/dr90mXb\n0xGEMjdJTLzQtdsQ94Ntw1d7At4qDIQBe4eItu+jeOuwp+AX9suKxcFA7+5o\nErRrxiSlr+3WE+QXVa9h+NkvkkmzC2PzLY4YhLUEY5Zyvhmr5nZD9JMCGINr\nCsEVyWS0XB23Gu0JJ3NfdecF4DHD1NRpYUUnS57CIpDreIgLKwR4OzuHTDXS\nidrX\r\n=yq6a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGirOoIPpBT8cPcP+10AeWxdDInQfIamRiY7e3HA1KTBAiAhd2Zv3vJjvdSvloJ1xXJM3Iu6lDFeadYUljpHJiVBVw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.9_1612821971120_0.8386478221645943"},"_hasShrinkwrap":false},"9.3.10-test.1612828964611":{"name":"ts-toolbelt","version":"9.3.10-test.1612828964611","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"73a2c9be71c2f67a344ef737ec00f8c9f95eb387","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.10-test.1612828964611","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-d54u4Oxe2uleTK4IcjI4ScjPjS6vU+fddCMqgu40ugI24ELpQc2kaQhddOZctb27dOOkVh9J4j+RQSB8+SLCNw==","shasum":"c72ef1c5e597ef1b0af94d0247afd20603d51ad7","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.10-test.1612828964611.tgz","fileCount":243,"unpackedSize":1991094,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIdEzCRA9TVsSAnZWagAATf0P/3YlE8Dg+773+aDR08qd\nsWe3kiEPB+OcJJGuRoxz8BRrKVMRXokfqIuoX2Rio91CWz3x9G3UaWv7AizV\nBofqlqZvx2lsB7lmlUidFXqSHjXup11MNiDam60FzYPDL2ZTCI/iNrqd9BG4\nNG1gnBYhH2vbGrY7dO43YN3ccTAbSXPor6oT727YLAZ1A2macWaax8DvuCKg\nYLJ+VxFcImdUSnM2ggh/qZM1i56eEHm48fpY9jrtN7/+mOgX8YmqQt09TzXW\nT2qKu7YXWOBxjh1MXfr5I8eBjmicmQKzM7bSQSCtrYrh6P3a/qg+syS2VcSo\n7CXuZ8EcLJM9DN+vG8u1yjYYo5sNbM7R6linHzyuYVkPY8ay78pSbtwCFre3\nHLyR+j6aLEQAKy0s6PkJK3D9bkoXxpZMPGljHiRXeEcAA/XaomjYxjf+FfD4\nxPqzSByTiYBolUSCI4B1QhdHVsUNL4R/cfhYOVXSd+aRvQa6j1YyDnhFLRbg\ngeRXHiYlG5i4ELB2EMpvgpS+9XyI/LjQmf9qLmf7PeDVr2oYFriweFOLQbgx\nSREJRKYOE4UoMeITMZOvCyVsL5c8syJDCWv6d8T8WxeUD8B4riXX+EU1nVxB\nYEhrdkoKbZs1KLSDCpd0gUVqVYjIRUzizTJ64BUOdanOB4sNbHyMeSECStOr\niaym\r\n=KZ9B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtOR9I4mrpf8AyBljwgsGYFAVNlm9hUmi/GrR9kHllEQIhAIR09ICl98ClCJk/Oj0wJWPYmjmVP6JmW+kmUEpY+f02"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.10-test.1612828964611_1612828978418_0.5362881888554618"},"_hasShrinkwrap":false},"9.3.10":{"name":"ts-toolbelt","version":"9.3.10","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"73a2c9be71c2f67a344ef737ec00f8c9f95eb387","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.10","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-UVUlC0WKjCoAOzvwZqL5xzChihyn2qLEAmQ4nhfmnK+vzbFSCtw9cc+3104jKAJSeQNZRxmd8SPeEt+dSJq/4g==","shasum":"c0d664a30e1f23adc0192088383a29be36d78ad4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.10.tgz","fileCount":243,"unpackedSize":1991075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIdGFCRA9TVsSAnZWagAApEIP/1f+t4Qi3FvDRIAOx4yH\n3WuM49wNQxml3tNFnzG97WyifDSi7rhGgB8QLjkl6bzNg5XhQHhfBHYIQh8m\nDs2csVmFHJjG87BAZxEYvkpI02cEOtEC56YAnm636mob5QAZfqPPfBmi+4Yz\nsQZPuMuPH0sk/OCYjqxVuM1uFfcrCBhykTBZmEuWqdVrkwsnro1eUB9/TfSz\ncSJUlsDjcvIlanU7DHJTOxLTtcoCF5VVVZWQ6K/vwwMqTjDM5bJKl+hM+7D3\nA/koEBn3JkdLUGEhRk68N8JjyhcA3Nb0hz+OO+DfyBAnom2WjZFg0jkNdGRT\n6pXyl/NWLn1OYOUWzJc1WUNZllbFSXDbHP/dLVoikkeqFn3QS75GJEz46IWV\ne+THvjpbsYBkIMewiic6QCJq3dutXRZfUQJFE7BkspoNtgBeg2aSkTjMoU+a\nC/T7fAXTlIhoy/KJwBV4e1d236pasuid8JFWCo7ffWE+bONJrPYBa/DnNiaW\nA++2qSk3jygRt/3dvewLXSVbseZPzrEYgt+9VXCBdZzYFk2s3AMPcGVUi76C\nGZnpHD4+6k7YwGpQZKbnEBiNUj3ZDplhIrFmYfZZbPnuw6kSiGgj6ggOtmPL\n3Gv2kEL+umhpjHMFOVewZNUK8U12gEUQPAT/aEReQyDyyiK9xEnT516pI682\nF4tF\r\n=Kstg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeXybg+X85IKsVXoZF7l5cMxPv9+w75XhY0fikCmM+0wIhAKNq69HKjPb8qYErJciChNM9YaHmIFnyejpFvC88blj7"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.10_1612829061077_0.949301570188638"},"_hasShrinkwrap":false},"9.3.11-test.1613256943525":{"name":"ts-toolbelt","version":"9.3.11-test.1613256943525","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"1af442c47fbd3d7d0a4fe37e4c9f6a1210c8f33a","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/object_knownkeys.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.11-test.1613256943525","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-77DNkYlqx3tE9/qiCrDOmE14fesj1prYCBwG4fy/wCF9LcBDXbihjRFljW1nDMeE2KDZou80t/hDVnAX/tUQiw==","shasum":"de57ec44a698148519c0cc17cfc25e251b5a7eea","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.11-test.1613256943525.tgz","fileCount":243,"unpackedSize":2009798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKFj/CRA9TVsSAnZWagAAxPAP/j7bHyDXNpxHHoOTD9Dw\n54IWk3GHXQQc+/TMV+4I1LtSGSq9i/UNXTj2znoJlGuz+6Erp3DLgFBZt5o/\nmu/5xF3Rv/Z2gcWq6fPhP1YDdkfHXTI8umPRhAKm/QcBkPi8oy1IJIHYIHO/\ncbY310w3Zd3SGBgt5Qv3qpwkEvAJNj5sGB18UOjiFLSs/Ic2iUe/l222jUVG\ntz6Hq2BOsUPdX01WF0C4DiDDZ4Q6x/VvNzSCwb7cj35WqZCAUXPbMm23ISdh\nvFiiOon2Y35h8EuWoN71BvTuAgqLS5Pb/hBiunfrKCyOtfXVaVCsboVf6Vpx\nvzXn6lEDtxksJkNVxXtAcc9VYMbxmT0QT4ZHbBzIOGFtKmEYKSjU+XtPcqtU\nz/BYeQv1ZYEyukbFOG+mJLO2wDEI6s+DBsL2NP4do4DKybFF8mZ0ymDQEIbs\nI0j+B3KN0nFK57+Sjp6gbAAn7DBmFFwlLbfNCTsIVixsoa2su87SrNzyvV9O\nSR5aUqcYGS7C4U3IWgrYjY7N9MINxQlMJZLDBuSMrFMm3QfC7XwEqbuO8iVx\nZ/3L0BpXqp203VjGR0YCMu4hA2TYXHHgaQZLJDQ7VJfMUdBf8oniYIuco2dM\noMgqibZRwXItWdt5Se959BIpkxSaZ89lYw5RQhGrNPr8OBSS1el+cp0M3lLj\nKCCt\r\n=lIxP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgb1dDAacEwaods2JHPH4PIFz/efESLGCgWxd6xsk5CAiEAwnuSS3TcQBwrjgwJZOvrVb7k3Agt6VdaMaDlLdmd0nw="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.11-test.1613256943525_1613256958939_0.16313999582189465"},"_hasShrinkwrap":false},"9.3.11":{"name":"ts-toolbelt","version":"9.3.11","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"^4.1.0"},"gitHead":"1af442c47fbd3d7d0a4fe37e4c9f6a1210c8f33a","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.11","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tlEJ6/TYTwaszZSXyf1WUgJrskWC9QZPjBlWNOtHhfSxOvmQMzDvNidYrr/ixaCyDOkyp/orEZDUc2V9U4qZ2Q==","shasum":"68d4dd58939a53e68472608c7670def7d618cdbe","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.11.tgz","fileCount":243,"unpackedSize":2009779,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKFlQCRA9TVsSAnZWagAAOi4P/RIQYJrLg1/6mhLxoDEd\ncmJEYrqFFCYnEDppAnHnJXmDtjXvLV4YHOTAUBpqQBV0mOM4071iFZjbqZbi\nsN4wEKhzpqdUPFao42+0m5GPb0JlMgV03LQ6OSaGheS+Eii5TONKoZBy82JD\nwUFR8AetdxQTt9DhLPS2CqIHF3DRmxTRfjsYMXqQu1mMyXeLdocGho+WUp6H\nvQQYsjDoqKCt+nBLABWqVLSq/CTSE5DNhOaUZlHT0XcS8o31AhVduU96j6A0\nUwanzttd9uB2fjpb5ICT4hWeAvYSzAP9LtoBiCoNVEfAneliRYtjFGkTve6b\nlfO4S94aNXFlti3PqCCXlmKq0dzJD3fXE1NZYV5r0k+i7vEcCAi5U04SKtPN\noDICQrXQSZbmsgHCPRnxph8skKaYDhg4bY4LT4gamMD2TGmQS+qNcVBhYPNH\nPK5pUqY2u/QMleQKmuAZmOT1MnAf0FgicRVY6zfk1PeNm2MCSAhRJ495gRrM\nSLgote3j7zI9BQMFD6T6evyld4NbMfUVEfExL2QS+XdVk8nPecA/MU4PD4J/\nv+FWWtfukU3UitLAM2R+W8h5Lih/7reBuZu6zvE/aDKsYdFB1ONwwdC1sOft\nhmKsolpIS9D76GEEEw1qUzjE9D9OoN+TTI+v7gnyx8Mbs5mlKCM5+2FYup1V\nvpcu\r\n=yFxB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkaO561uJVcDL5hYXxuyRNl53g/3sIqMI+LZ+0lEhOMwIhAKYKx+iT516q54pJWScYX3Ux3JRXsUdFdAUVQ7FEnrQ+"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.11_1613257040207_0.03636014616879235"},"_hasShrinkwrap":false},"9.3.12-test.1613430915381":{"name":"ts-toolbelt","version":"9.3.12-test.1613430915381","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"352341b7eb4f4d6d143d67cdf132bdc907b5f4a5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\"}>\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.12-test.1613430915381","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ywHuDXe1/dyQZ8cQedpfkPZswU21gM7XrS6QZUKXBSVfOJMcH/Hb8mYh7v9A62/T9c3z1nK6rF+r0u3ZmuDyiQ==","shasum":"39e875980d16edd464492a006dcb92edc916afb9","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.12-test.1613430915381.tgz","fileCount":243,"unpackedSize":2012778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKwCSCRA9TVsSAnZWagAAuXgP/0LwVagLNoGnRH+HExCr\nWcwxszQc1LwGln5Kg+/KbXcybEX4uVwjc6EhEVODrrsC/KwVbO34wAB8VQ7a\ngsV6vBLf1kdXaRn4viSEvfx9sB2LUEz/AYOf4fr/U5miHbkTNykNnXiEqTuw\nIgdn6JLcplyH6sjyPXTjsUwFJuTWTaY9V8Sbhl8wy1LZ/ZtpOoBTgjSpue3/\nYvNfkvwJ0FXc43spU+kQe2ETfPDRLtuwdzlNGWi48akGozUc2UxnRb7ce+pq\nUeU5e8UrnwkMKhsQtscRzgw67Drz+1s4UksiZXdZuCENczYOA2bBjkmvgVb+\nU7wyP1l2fc1z8gTMnEKHySrZGY7CnMGCnkToigv3wZ10gcEJs/2g/A2zQkXn\nB5zqzHJx5Est7I3smvJyxV1/IUmUY+VGyv9nrCgb7jAQPdTM6PcZ5yJF0QXY\nhdSmEeVJ/KaOiwS2iZxM2HdakvZCZSStL19gxEKG/7UFIhGFQgQe45niBIQ6\nG6rMREUwogyVy3yU4iM9i4vbUvIVI0bIRy1rqjUF4s5hOaW3n9KpuUenVjV9\nKZa9Vyy5vAsxcHU4RY7yng2BiU8ADSFPYkBGILpWJfTpDIvD+rq529ulI9Gt\nAYTFspFlwhM6vo0u2S5iCCmNsbbX+ouQ7MqTAKlHrAffpPrFYcfs/zfDX75n\nSH31\r\n=E2Cl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZ5hsqqd/PaUp7EnwpjN/73jHkHPDzCvVjZ87/PXaRoQIhAIeb3JZcwBzt0AYDCt4Cad23QxD0XukkQ8V3WsYQrnzz"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.12-test.1613430915381_1613430929460_0.2715261470400816"},"_hasShrinkwrap":false},"9.3.12":{"name":"ts-toolbelt","version":"9.3.12","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"352341b7eb4f4d6d143d67cdf132bdc907b5f4a5","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.12","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-xxvVS/vhnuiBnOplvkKQe4Npp+KvClBCf62v3LqEOMzcOL/6V8eEIqhNHm+dJQq5Obvx6e87eHe56yapW73xSQ==","shasum":"37d364da2f549d2c7d37988831cd0e43cb4f2ae5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.12.tgz","fileCount":243,"unpackedSize":2012759,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKwDmCRA9TVsSAnZWagAAVF8P/Rr6KPr5Z8b+6iJA1nCx\nFGn0oLYufDoaQTylgUOPd1IHf7Py0N8jJIEmmC5DwqgNzxIxXOGDUTBSqpZP\n0cNG2scmu95EpC2vZgxFW6td40HoUbSXPyx4BpZVveVyYQJ9oMREAkJTyoMh\nyv/rGj71HZJuNHDjJW28/xV4iStzzTHBEObrtBfRcHurhIVA9brdZmQhiNAg\nFFWgiKc33fUviU7KbztNBfastw0/KYg/Dmxq+NMqd4gNTng3jI4b8cQ0IOU1\n5VUvuisIw591hus8baC5Y6ZzH5qkAdm1FPTfuGexz7rqNmQSL8GtQr/d3cL0\nIBUAMQnPxksJWb0ZLDvVzUYSTE7xPut7q/F/GOSvlWG5opAidV+dwhqCvhcv\nh8+OVnmdVEbby0u7LyqS7jNcyUiKRaryJ3/SwBmsU4wvhgD5SEYh9fBK5wDj\nyG78gZlxPbTlKiGJKTYNUHmyJDNNMJrip1EEXzlo89wVa2zpEcsUQuWfFhGP\n1IX4PrU2uH2dvwJBmXHvR2lqEIA6kPAE+MAJIINBWU0ZaDBbYfwe69l0/522\nfUHMzU2y96rmQbVg2jPlnc+CuNcsWxA34jiozM7DLFzJm+uvr3erScf2eePx\n5l3L/i+/JqWqnaRL8EgRbQ8ovcAXnJwkn2SeDh+w1qVb3N/BBZpkmaOo4qbI\n4Kvu\r\n=AEA6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICfUIhhvt93wOVEN3HYEPwKiSnfoozOTk4hkeu7xVdGhAiEAzfrW1bvqTIIXFbVnrun3FYwNBi/F9FoTTOcMDCiwvYM="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.12_1613431014005_0.473717860300749"},"_hasShrinkwrap":false},"9.3.12-test.1613688804167":{"name":"ts-toolbelt","version":"9.3.12-test.1613688804167","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"9c27a61b39eae7f2794c349973e78023894885c3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.3.12-test.1613688804167","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-BIIb9QOEJ5qQ7PgxFi8CkIrQjjGjDvrdvVtvTdkJLAZbNfFxuwCwwnHESE0De2Pyz3AzovxyXUUByxw0hGhTXA==","shasum":"11766f4ae3776520536fc79391507317ba091806","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.3.12-test.1613688804167.tgz","fileCount":243,"unpackedSize":2012777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLu/0CRA9TVsSAnZWagAAULUP/jQ3PUaLxjFNQ5Iu0CK+\npSaZx/6DgcEURIBtA9vmNGphO2e2h0D5dMNTraca5cQXlYlWHK/761K+dA79\nhJUOxr+dATe2Eqn/ubEbPWR+718oCR5yFaRO0mFoQvLEgiIuVIgFJ14aNf/u\nFNrX4Qfj8zXsukalfW0HKvmTyBOcd/ULaBuy1yasE3Yi4m7Uui0jhuJA5PhO\n8YL5+66NbZRK2lTTjUIo7t75TMg/CHMvT27SG5R+Fy0JcfQd8tE/UwkAq07N\n5PIICW0rxNhQrttFVMQkBIsM+GxV9damOj2I6HsGPO6fSolQAjgv37FWieo/\n6jXX6li8zYr0XhNnUvSwoHs5ou+CiCeSvrjDmYQQju19/PgCMFbxNyNSRJLR\nMYkbAQNq9GvyHcsfnUHEY3jUepz2pGK/nmOq0ce4o81jNvlIJxDYMBzGpfSx\nLgDxiLKCNxGy5U3h+m+kVcnLoCxxEFcrGZUXxfMdDfpyRgK8B6xG0c0W08+e\n8UVmJmH6B4LJKUDi8D1ugzwgxSIffs7ANA7Frqo7LPI1p20wlrVPSA/9qEQN\ne7PQkIPd36yZWevd8I1tDeLli7S6tfnHToxdsuVjaZ3LGbrMS6jWhXoUu1fX\nbqbM0NpgcV2ynqzyFWP1aIFbwuqtegN8xQ1aKmNJldmhQNgRqucbt5dDai7I\n5fiA\r\n=hdvG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2PHHDB6AvSPggd3PFjDOJuBoH6G5L+gBt3h6EdY2JEAiAaLP66IbhqxaroI/Ye24xrdbYbtz9eW6m2f5fSuUNbgw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.3.12-test.1613688804167_1613688819849_0.25335544692019263"},"_hasShrinkwrap":false},"9.5.0-test.1614542567864":{"name":"ts-toolbelt","version":"9.5.0-test.1614542567864","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"4ea1358dc0a166746014b1ae4086797f8b11b562","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.0-test.1614542567864","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-f867jSYYnyqkM6QyrGJY4Dvx7uexq8GCJw/Q6A4drQFqUDqZ/TZYhWOdErFxmVXlTkYXyetEt786h4eykb+9pg==","shasum":"ac3286855f374962914c19b20758056a81c9e19b","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.0-test.1614542567864.tgz","fileCount":246,"unpackedSize":2030149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO/b3CRA9TVsSAnZWagAAuCEP/17I2dtG3ZEKlDtix6Py\nDxjJsHIOd0OPNvDvWRI6p1ePt4UWaIsM9vBLZE0DWy15Ftbq3gGT1dvSnowC\n9RtttX0QYKddOQi9IEBFkfzAthWdep4kyPo/sp5mN8hxBpHXUG9/aG0W7XR6\nHdxzkiMrrGg1Eg+CntcymvSGAO0eNUt09gzYOOuNkGTL6VlCVLaBtFows9h6\nE7wTrSZ0/+PxtBlgUvPyCsW230iwL+K6fmZhnoH3caFBGMPoch7vcTbQ20bg\nUgPtmCcTct3uXbJm1yTdgy6j//gPTKO7F4cWoxrq2WE6Qybanae071acG+Ko\n6/9TYCsL13+tomywUx+HLbNfXg0H6eqMATek5LD20OyDJDRWzow9sTNskm5R\nXG5+fWr2bk84kcrptXUfkiyOzEQO5yjio3PUxWuc5lq+AGXM9VbVWjdAkh93\nDtLc35D88IMukSpRz5YWSRuXIn8pgyM41IgqeUklaNlEj6DTUXWdEuNXiQHT\nfQd9P62QvjZpJ60w7oMUCRhVqpcsRYg4+g78c0LfD4xfBv/Z4JOWS5Tw6JDg\nQWKbw5UMYmpMQFxwWWCSILlaKmb1U3nFi65KtVFQ945dVtBfPOPX6XpQbbYd\n/ldxkVG3fYVpPujBK15Sp8sMFYNrDb/C0IRKP6MFfFF1DFYtqFHzU9gIf4oc\npp5j\r\n=yRRr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/cbh5Of0Ju586nNkT60cZzKEclCmA4Fb+QtsfsT4XBwIhAPaxIBcY6jzmfI4TDUsbT09Z0hj03NpKSaTCyPWSeUcN"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.0-test.1614542567864_1614542583209_0.7791162954038904"},"_hasShrinkwrap":false},"9.5.1-test.1614542630442":{"name":"ts-toolbelt","version":"9.5.1-test.1614542630442","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"359e223c1a4a38345c989e3abe72257d41bda989","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.1-test.1614542630442","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-iNa1g5OZjLW6ZkaOzPHhFaoBiDxUJxMudfY8zJ9lZcipX2EbVKqfKtEGQqPq1q4bRydraWdc2bQ8o2F0jceEPA==","shasum":"2bca6df4e56a569ec2c7c0477597f32fe2739021","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.1-test.1614542630442.tgz","fileCount":246,"unpackedSize":240906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO/c1CRA9TVsSAnZWagAAKM4P/2s9Rn+5L7dQt5P4H5XC\nesz6Lclg/hLM9X4eK96Z0obJfSBMz9cLNyPiNFOY//VHEdvcH1p+S/WbsXzi\nyeG6rXhArEvrVRmvA9cA6ttHfpgXPMEA4XpU/BFHxrNFFqBj3lA2sAoY8qR4\nJIfQvf2tSRz3ijRtRKT+aAhCb3nYCY2yhfL8OL3F6mUh3Y4F2LLBa+bL3A9P\nqrrhz4IstjzsZ100wywaGrRaMtwLoS0BJPH/U3qYScOH5Jw3iFeIrOGTkMiP\nGMejOB0qBMvQtuXvQGyUlDJtD9ieeTXrjTb5hgjiMtO3pg8XCIkrt5qiASUP\nlcwvpMHuvdWa4fIlHvd2MfJ8mJcA5YrCtPJRNNQyw7FNodbX8ms8w22ILkmO\nM6UCAC8A6yOORD/OTup2bQ1BdzbRbYP5WetUSAV/cgNSQ3yey6DSt7jktXuC\nn2xyNQs+q8qWpTRjbZqaNuRnzhJaMuZHLEognZCbyJ/wpAT2UNmlXZX53kNn\njwOIalC2ViciImqmBY3gkfkxpc7VIdMhpmfWw8Yd7Yu1DB0UYqOBJcgu64zO\nhh1TmY9VEH+aUiVCPS/8INnQFM1199sAPAaJwPwM1k+jV8bU2h/CXZgGXMl9\no/NseCmT6k4t00Z6g8G9vPCx3t6dH1S7jH+eW87u2dsFB2/D4O29pl0Tn2AM\nxJLw\r\n=Cuam\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlOq99uHDs57TtjXgLEs26KwXqFEMyfx1dwsNUJ1QAawIhAJXZNPYyN1TLNI9EDRb3SMGliaBoTTySOJ/Ew3UhExGM"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.1-test.1614542630442_1614542644871_0.21491979986540266"},"_hasShrinkwrap":false},"9.5.1":{"name":"ts-toolbelt","version":"9.5.1","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"359e223c1a4a38345c989e3abe72257d41bda989","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.1","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lZm8gKaR2OvgNgen2XpjBGIB4VsP0XDbMDlQEOkChqogR9pBGcIXWrMSqBWCfD2qyyPjsZKdJ9ANvEsmiOtGqA==","shasum":"60e85442273c7fd3d22323b3d01c00ec627fce89","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.1.tgz","fileCount":246,"unpackedSize":240887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO/eZCRA9TVsSAnZWagAAGSAQAJYLITbU2ebhObzKUBgk\nJ9wbQLKJSXVP5tNba5iIGVXZL1fCg36I8m9RZKweJAfzhRfJ3+QuY4qDZ0Ih\nwjVM4fwkCGN3zQRCbLrjEBU0vi78nnD7sM1Wr9BGdOLlsOzonFgoo/kUUMfY\nb1uw/dEJ4VSHk22B8VtSiyOlFYoN+yCd3NPi8MbxoaEmVwkmcIUTWaX9ZkCA\nQZTzXHUo+U6v5xr0HBd6SB5S8DLOsQldUvYAJ1spIGrGqSotfxU/z6IcX69W\nmq+D/UGINjiRIMtWUD05ACLiWi0x0JpCXrgEpzCSJ2zTnbLr2vXb89oq8kNs\noFkFo8twv4tLnjDle6hSHjT2xiTJDiPWPWhecOgHd13Oq5S3qT9eJNw5TWOM\nOg/nVfCF8Pc2Y7P03ri9lcP4ZbgxibohFew8SCRaCbs0NGRGHE3R9iKemQTY\n3w6NnjjHkVSychDoSSXfACrXgEitkaVQWH15uPF9l0arKoRXCmfZc0L8RKT7\nYkVEu3PzYx5dTXEhrT0OGLt1hL9MWyVQq4wFUU5zyb1T3tdGtEM0eJhWwdc/\n/bhC6si8em6c7p3PKFAMRJrlHvcuSCP/dfdQkkwr1osbaJKH1qhAN6aIUFVV\nYdUwHAPT85v8sEBUl8j5QKoF3y1GFGNF5KfyP2CPfhmTKeHlGWFi68kI/E5M\nr+15\r\n=8sVr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCStW40j9hqoh0kvQeAEE+LaFnny4IHYc6JivjCTF4pKQIgUTrJq6/zHJ5WRRhi098wRxQ7E3ioldKTgx2wDo/d5wc="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.1_1614542744890_0.8104386278425928"},"_hasShrinkwrap":false},"9.5.0":{"name":"ts-toolbelt","version":"9.5.0","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"4ea1358dc0a166746014b1ae4086797f8b11b562","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-K9rJLHU0I7T7ci0IUmgtxkR13nvhGpn3nBzbUiBkghFBF3YmrxhNqvIBTOazlk/WcUpoYJg1Owok9fkMlQizhw==","shasum":"9152d5cab3cf1cd3a206eba7c2d5d33995c44595","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.0.tgz","fileCount":246,"unpackedSize":2030130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO/lICRA9TVsSAnZWagAA/14P/RKYCqR/4IhfIxkietDR\nnoQ488QXC+udXg9vo/YPqdQOX4lkKghhgOoZNK6Mvpvxc8GDdFE3Gi+l9ssu\nke+PQ/5SXtjvNJDjzboOev5BSjymIV9e7NloIbAwtrQLZbzecqut4ETGZu3b\n+9eJTgKkTbzF+gt3F5/735cIEC/IC5FuqSOcqddVMzbZySgw9r9cShGkhtIt\nRDUEqx5EVntzEZUwdaLVSuZ0nUm4Biq4/VGD57pXaHtbtk4KdPL1lARMyKKJ\nNlStswyXbmVUQd/Xfq+7ooe1/8200YyatVhjIVq/ZAlX+3RGFpcurFUoAybP\nCoVKzodF/Gehb9YjHrEm9yWhRPoogMN8HttARaSRpAIRPUBPmCbTOh1f8+t2\noaqtKZ3BXUQ+JNyeLuU+9rnlf9hWnl/+jCvrSPe2y3LYfaLhSmklZgZCi7Uc\nZ0PmP+X95aOXCzUJdJcnphVz8hW2fnG3A/3nw0zwYlQeSDmvpHySXNbHTYx1\nC0YgNxOWe2MjxyGmeI3sZxjcfN9GKkiNKm81MnsBR2QmhNvo6oVzYtXROz+C\nJPUewWu2mv43boaZHYawNLGzRJZzT5ZmMCtUZKGAM2fTufYqbNt7xgsYMzFe\nYoPKb+L2HNVvD9HN3PBLF2YtsUAT15gxBXNjNKv8+pkHhGOVfzhfnEfpM3OU\nLmyE\r\n=/1DI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGk31wztLNZ7Uzs7rcqNXNoNMsmgRoKyGZotMuo3WQCBAiEAmOtg5ImCEdKru2E8wm3JtSQIqmhrMS42ha7B542dKzs="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.0_1614543176407_0.15128728427140037"},"_hasShrinkwrap":false},"9.5.2-test.1614597145842":{"name":"ts-toolbelt","version":"9.5.2-test.1614597145842","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"ec4a953cabe6c4d704c0dca5f37d1dc630de047b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.2-test.1614597145842","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ADr6Y42q69gAPNO/8FzU9d5EoECCW0Hqq0ZMI+60qEA4G/IfpkUhDN+XxhamR29HXjKIUvlJNNIpD98Wk7+52g==","shasum":"e190996ca918359f9c96a956b8abf73262dde7a8","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.2-test.1614597145842.tgz","fileCount":246,"unpackedSize":247968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPMwpCRA9TVsSAnZWagAA8WwP/1ATwxWBDiDuiTPK+pFx\n/JBZ35+bS2t799PH9Vr7koGaEaZxIvJsJ1vF/A7LRzx3FC6FOJ/zEfqtY4SX\nz54k2qXoQbKHlryJYD4/nA8N16KnMDnRRyF0XL4+jqtQU32UBuXqbkQJfkcJ\n4aaO+sCsSnzxWVfdl4Hrt6JPATwrVM0BLT2Lgklb8gvP7E55rKT7tImPfnCN\nhXydjVO6JzXepxM0dcJCaC1SfHU8JKqPiQjnu2p5fFUXR9BY9WtLohS7cNP1\nrEm6HCMwXUzEFT4f989I3ZzWS2eeEmC/q8neBXwR0dODNHudMxRGrBTBnHiV\nzMGjAXXCmU3E89J9+/v4VdfT+9OkrzdG5+qMP8surjmq4JI+aud54xbDQ3fR\nu2NLmkdFN5E7bY9lmLCVbYBfGBV1ciWlRsuaimo/6/wvjzC4hq3Ub90yqhH3\n6BedRm9Yyx2Tf51bUP+9PSPgzjdpn93eL6DqJ68Q0vucHixzcCiUPfPoXRoJ\nDHUQlHT7wxB2DKKOdCeArP1fRmHtzIkF0L5jB8Negr5qmP1pCHq34LQEH0El\n8YOBeTsKwq+dJhiiwhi2e+Ek2m6k9gjYGFtoDkVaRUjdWQywEUepke16BTzp\nUb87R27+al7OXIz7Xnj92UGYcgYL042c+ey9/pTSitpn9h+lBoUv7KZJPP6p\npECt\r\n=QQYp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfJUB1+xuSwGEZ1wEfdGyD/3disBuinfO7/Cjsb2X3mAiALXRwbsi7Ngax7xyklrPfmDBHPuplcY2+tYty+PY82mA=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.2-test.1614597145842_1614597160450_0.1810297005945809"},"_hasShrinkwrap":false},"9.5.2":{"name":"ts-toolbelt","version":"9.5.2","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"ec4a953cabe6c4d704c0dca5f37d1dc630de047b","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.2","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Jg3C4QoZcoEpdQYLlAIWmewKJWapZ1O0P34p45ZM4p130zWd0AYFEzZJKmGftW9+OZZELqkg+Zllj3BuWKNlJQ==","shasum":"c1d0226b93eab1f12ac1d788a35ba5f8363a3e50","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.2.tgz","fileCount":246,"unpackedSize":247949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPMyaCRA9TVsSAnZWagAAAvoP/0xbycG33WckVAuMVkZf\nacwYVPjIO1oufde1fQFXAvjOSnSgaLyd5XXneMTibq+KQVAOf2z/7H3TEP4n\n1bAt0l/uexB+L6lUJFF14W2wxHvbYhksrbQQn05DBTWEEAPi/V187WUeoOsd\nj9K5uhHPu79qYccxYMZNr1gx5+lWmSEM1YNWs2gYYy0zoQkeVE35ZvH59qaT\nVlN/bpwRwb5wy00/hwnRNVIOVkHRqJw8j3oIa02qI0m4bUAOD6BJTI2NPRZo\n6zjFMppVXS+jNltVsL/fitKHJf8OebXjFrQ5PYW4i4c/+bLHU6CMtmk7YghV\n0RDvhaw7OiHSNnBCuZKVtZBQ5IKP0yuuxAQPKbeLxb/g21ZgE1l2Xh9sTN36\nKJRF0FD57w0oYN6s5mjnCW3gwLopZKnOSQKeYOpZjChVbcZC2T/v67+jUOy9\nx9zYVu/CNntVGDZpZwKXC1gc4Qibo3/AVWQaOsHr8qHCQvlXWvAEoxG07kx3\n/O0PnuLFyucG3Ylul1ESIsXt++JlgOdyD1pRsnIORGy35/vsMwO+Z8A0HfWY\nyuwj8PeWddvgrmZ4rNAEKw4IH/0SlZ1Hy0929yI2H67w61TPHhcXUSXdBhKf\nwzw2e1w8WkV7flgH9ppB2zEvFHLjrKY+xfEhW+3mEmOm1lLzh198uZTVBnTH\nkhWW\r\n=psqW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEisJshJ5uZwRpeem5HE8Hqwx9SBYNCr6kvaMBa90bSHAiAOABSLHBewBAsY3yhJ/QjEDISt0D5VNb+SNn0DF3J4xw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.2_1614597273929_0.4363259753189723"},"_hasShrinkwrap":false},"9.5.3-test.1614727682067":{"name":"ts-toolbelt","version":"9.5.3-test.1614727682067","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"0836f6e8187287a0c86f249e4e552d68a44e4f60","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.3-test.1614727682067","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-v4FV4nAaNRJtg3fWB+GRw77wdM4dvwsgzsUKkGSI8YQXTwbP88U0sF0/lBqNBWOLUrp4EyKG4RyTXPpKF9E4hw==","shasum":"dcd3ce5a9fa7a58b6eb8a137f74c092b99264bf6","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.3-test.1614727682067.tgz","fileCount":246,"unpackedSize":248596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPsoRCRA9TVsSAnZWagAAjSQP+QB8ka4Fk9jyzHt0C4jh\nRrA/l641oLPa0oc+6o+cACFZBTxIdLC6MubW2H35Bu1q72ef2Ppo3mAoocqC\nfU8F93jSF7LfFfr0bcknjfmLpHY6ZKS/rej5gOhMBDeRv1yNv1AKcy1B9EO+\n9hX7g4zG0d6UKbxVScLKjfAy24oleNHesP4Kn+b4CLRVJmjszUy2GXhSayCc\nFd2DMESOehaS5WWnAM3uycmsmcdPOiztQcdtrdEFHLRGDfjyT34WAF58FrgM\nJHPfTqB6eaI7ok+WY6iG0EqpzyxoIN1Y+Zp07WzvaFaZ2CSzjbHqhCLCumTY\nyd+Xc+B1v4XBRK+kElWRBBW5ki2YMglRfR6saMlIsNoSTzLW3n8bkyud0f8Y\nW6bFyY0QYypkJ52IB4MhzGMPyT61uH1hgFWgAGFdrrDZ7CRHykVxxKes/VSE\nE0CeVn7kESz6TJdA5p2GldSFhqZ9/0FDqO/YKn10Owxpwph3ZBVn+i5ny9hw\nF5pGfrE7PkTLfCnWsBL5JHYoR6OMAMH55YilUWeYASku+wydTuO0LLd6+NEo\nHjhYgMQTNbaNAXftJY0IUZLy6KW2snnjSm7PFhhigG8gK9q+LvKlNTbVTE2S\nOJn6Ky1M5iJFOYclh/N0rRkFzg2sjXqLTkTJ20/nkYDmQpnZLv+3VyrMRpqI\n09zq\r\n=OwM5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClU0Hil3NTXY4Jusa22kE2omZLw0nkluxmseh7LA5IoAIhAPDeLVkYtq5vg/5wFXkIktiush5yM2fI9x8zEoSlKc0x"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.3-test.1614727682067_1614727696252_0.8634980997726771"},"_hasShrinkwrap":false},"9.5.3":{"name":"ts-toolbelt","version":"9.5.3","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"0836f6e8187287a0c86f249e4e552d68a44e4f60","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.3","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-65mMI9Unm3aalVTKR9Rg5nbKAkHCU0YXu3eS551J6+24gfON8NsWhCAuKA7jW4LTja4cVWHH1aHdnbzmAjqk9g==","shasum":"64d6ba898508f04a4d11778c6021b2557daec2b0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.3.tgz","fileCount":246,"unpackedSize":248577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPspuCRA9TVsSAnZWagAAjGEQAImyTrNlkKIgZrdQEWAc\nnUx+QBRkuqH617XNzFhj62e2DQV/+X1AeKBJwoAkCeuLeWp1NMGetTu2w25W\nDVfIGXHTFg91Axi4x6nEGkpbTMQJkLTu1PYZT19lvBatnAmMCwTbV3Xsr3SR\nwokRJ07G7U+vhXCQCQquKUUxfQ2KHZzTPvUfe3om+7nuSJNYvzw0lJSU3P2L\nMLGo97ISnfRjtf5KB99pTiduMrBu0i0CxKQJxVWGqywk+AHUmY3I8C8tmUHG\nt8a1NmoJPHbaEbBGOsyHmtwF8C6g+NuK7F1FOIbC9eHZ7vZG44mM/vN4sqtd\n88t9FsvRNVZQdy+kQ1F8FLfDc6RDN8gVp6VptTRCZMYpbCf1uhOyNj+kU2Ll\nnlbaYeGkBZU+gB6JK8n42xrwtfgzPiwiehK/qccrjSD2gAC4Xg6C8fcBfcU4\norSvdN5R89KohA4qK65pLdi+LdHpuh3P6pGxc5v5gepnFfqIk0RnqYQXgVAx\n5jJymFVp6YMZObfMvr+vOmM3O4LBwSQbQ63GLQaVd1q2NzleMZv1I405gZz/\noeld9su4vm/HHryy/M452dP2+JqJ0PlKctt2r35mxB83tTmOGpMOmq6P0rDo\nESqLOtxg9kdKTHpxN/w60iOL0iPIuxudVsZs4xNwczdoQgJndU+LMBpwAhVR\nCikA\r\n=vfJO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7pv0HN8n7dX8lNxP/mzMPBxWIm1dQfWMDU3+Xfu/qVAiA0cj9VlqE2o+L0vVl+FFMEuAVnCJ/RpfjZbYedVOMwtw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.3_1614727789797_0.7802491217617897"},"_hasShrinkwrap":false},"9.5.3-test.1614866301683":{"name":"ts-toolbelt","version":"9.5.3-test.1614866301683","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"4c7618d77b07d6b8c6dfd5087aa85a073bf57db3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.3-test.1614866301683","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-yi5xJp86QQ3Ywk+rCSXueVihAsYWVKUsc98Z9UARTuc9XK0/aTMZNmbs+15dIuDUqfG3PHuTyDEfG/MV6m/QGw==","shasum":"f9f81e2781106e19e8ef17bfb44c4cb0b8afde47","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.3-test.1614866301683.tgz","fileCount":246,"unpackedSize":248534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQOeMCRA9TVsSAnZWagAAmSwQAIx0GXgpiB9pywxG2CAY\noD95/zXUGNLWkvvsvQZdQy9d168K+/ThvKuzBPTSbSyPQbQiXNg6eMjEU0wW\nCnOkGQBPBKVruXVRkN3ocy1XnIEhcK+z+F6otvkPn/yS5PYJDHxMqvmP9Jud\nd9gqZ7/F8OBIE5T2UujLEb4qx3UKEp/S6Er/gcSnRLcMQbMZD6QXu0DRQmpi\nUHsnmoRES92uIDxYLkKqsvG/DkS1Ps3IDHhTD/WkF7vzkEVTdQXliva9UlJ1\n6WpKerqDEAJ63A+yMOU31s3AvLKUEO1H5M93wuWn40oKO1lSsyI7Y4Za1mbx\nm2rGqzIpGdg0CsAA4QHOEHcXdO8GRjureYX/q7UZbGhzZNSI9OL9UULiVWaU\n2WzQ3fkYQ7dfhBaPLtu7uAwMhfFq8hwYd+LX52xNepqCzIGGl9niFfX+OOCV\nx/R5E89Q4sp19PCwamMfUKIBeEhQRp1HSq655IE9aROhYipKWsLIuCpKJPjr\nEpIgq52C7Rszw+7yeX6Gm6vx2ujHG8TwhkAC6jje4U8HsIko3EsOn2KjEC3k\nMovCgnEKR7vEwFh06z2jKzdU0cTM2PtFJ55QP6SOC8UhqfgJnfWNFiR7JRbR\nPv6w/XWy+TCUm2yuYPgTKDNVvg6RE/Bg0EtOCsd+PP4ypDZT7/ND05onUrq+\nPBYh\r\n=dVYl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHxJI/YW4Fa3vVlJaFjTkBwQrsgNXtXHJNIp7rtxV47oAiBmHut2fy6mfI/U2XLWYLVlVCO5SiLvnSL8RPOuhZzreA=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.3-test.1614866301683_1614866316241_0.7440450974875168"},"_hasShrinkwrap":false},"9.5.4-test.1614866345270":{"name":"ts-toolbelt","version":"9.5.4-test.1614866345270","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"855855e520ed4a04059f9d61884d2045dd0d751b","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.4-test.1614866345270","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-GVRwzx2JNNNUWiLfNin7fVfVA8Fdro/P8CyakkVr2EOQe0h/VN4qcTjweJHvM4A7UnS5SPybAQFoTOuYbIrrzw==","shasum":"78551a400def878f5844808eba9fb77977737b2e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.4-test.1614866345270.tgz","fileCount":246,"unpackedSize":249413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQOe5CRA9TVsSAnZWagAA0AwP/A4TytF6lTDE7kBmmZCI\n4LbcnDi+cWmJJrUXPtN+m0EuF81guM4y/LSlxaW761eynOIuGzGDIqBwrRzu\nouYA2Itc0hbR73rAs2r3rhXsnIJc4THUkT95DvoTfT9YG+cb5mC59fjmu1WY\n3zQWl6heqG5VNAENJJPqour5okNKHp7yewvPCkfylyuXlyn4H/WFVAdvrEWX\nYm9H1g8azha4ruNs17suRd/ZJkN+O6RG+cOvJ3Wt12N3KwGCE0oRea1HaP/x\nm9s2J21Wnd4iVTKjm1iChgWpD3RcYk6H2+8EpoeGAWMvC0vwa8bRth0AdCa2\ntvKt+taauPuEsU+wtzpgs6/Rhmxi/Rf+D4KlUw91K783AzlzmcyR+JT2kfX1\nK31YdLWGpmF7Tmwt38+It65CrA8IVWGQMyHzamSpEbB5HYxnDUZe4yEGXP3e\nRqRQ+uBDS2K4XKc4mLkt9d6o7yDa9XnSWj2ldJcTKYdG9KgkvH2ckjlsxtv+\nysTxciAFj0oPJFMF+IC/K1D/d9F02Lk5fPG3zD7G+UBfhwyCLVlfxBTx5HfN\nYZo+aG2g9OVqoCK8VwHrzVHuz+mAZedQEksy8DFfcmv6hRJ6W9pYNqD+10KP\n52pTlmtjOv20n5Dd6xDCnge8qUsF2LoAgXiOm7NaXXExGIfZfU71WacQV13R\nMl+k\r\n=opGD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIErYndi3LPYClQlFiOv+HfF9BZt+VZBnNlBgDKCoYLVNAiEAyN75E8GPyNnsS4KkwS5Oz5nN6/Fvox8+CZSLDdCfprg="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.4-test.1614866345270_1614866361267_0.5737016553579972"},"_hasShrinkwrap":false},"9.5.4":{"name":"ts-toolbelt","version":"9.5.4","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"855855e520ed4a04059f9d61884d2045dd0d751b","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.4","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-l5E4Lj8mVYrX9gBMu1gosYKM/KZTq0F3wtAuMk0KoB/UTEWH9MVvdqHY4/r3i9V8fm6W8DI+oWhWwn19re0Wuw==","shasum":"5f45b8caa21221b656a17be07fbc47132a43aad0","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.4.tgz","fileCount":246,"unpackedSize":249394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQOgYCRA9TVsSAnZWagAAYs4P/0Z3GviY3ljKWS7d4GAV\nk+G6/Gcwvpb8+k66kNjptThDBio9MgNG7VM6gei3X63e8mmtrK73ngly3nyR\nWi+N3PEzZtLmyzq72+Nwp4Q/h9YY96HKocQqMomYul1HHDmmlr3wPLmMaarA\nYV1VxCzw+bgGMkG0+/ifRSJnK+vDMeNsAMrCsvOyjE52DCPNrvZgXOJhR9Y3\nuBQPkPymddHI5SYnU0Q7XNxpnRuseWAQFNJEcIlslNOHa0YULWCO8sye2ccG\nCs2QQrhCEoEX5qYPEPo3TbtPzurABgajpwdgAoxAwbi8mzXslblhSllgyZrM\nyrzy/p4FBe7Yb7U8ahBK+JUE4agqD1IY85SrN/c6Tg1KmfENsaMAT+rHyfDW\n6/VCvVr5pSS0en4hn156JXGMwbwDr1Zh9txpDO8PdJfHgpbkxqE4CQq3Wb+2\nVgDU/H8LGYeWb9h/+gCdm1Aq0Mhxf715SHBA+ccgS8dd+HVxCK30+uYK0Gzh\no09JlvyP6O9A5cIQmjdWzQKRXIyWQHvbz3BezCK0ggQDnXd//nexiN3Y+Mil\nyjL7ag0/TH0BNWr4lGVR4lPaZ2cLd7jKffYC1velUoS105F4pmeXfNIm4uEj\nG39bUhzZNHexKKHFCV3jGzn7OU3wF5TpfuUAIP77wZnFkwAV3P3zyg/QUVFb\nRS0P\r\n=j3Bi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJBPdxZjqLDOq0kWyixUM0U6kxY//ggBqB737HHfej9AIgazxYLXe7Pjg5EQ01WuPHB/q6NEX6CQeeso3aoXfqhyE="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.4_1614866456122_0.7685115029828713"},"_hasShrinkwrap":false},"9.5.5-test.1614896541538":{"name":"ts-toolbelt","version":"9.5.5-test.1614896541538","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"e28bddf33066850a764e2ba344883ff84da561b9","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.5-test.1614896541538","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-V3rsbtk3QrbuLdQVJfEmkV6vt3HWBYjmIj0axZfWSq8hE/RM9iR+WDPPGBL7HVAtrVmRoeGuYOP5YcvOBE+4Gg==","shasum":"394709afd660bfa0a24ff974efc3edc090b7855a","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.5-test.1614896541538.tgz","fileCount":246,"unpackedSize":250561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQV2sCRA9TVsSAnZWagAAVfMQAJ3CUXom5rD6B5SgyA04\nsuQlIUL6mEcyzRfTLxQ62xtEloSHBX691fYK6sP8geRxfnb5JCYUtca9he1b\nb2Gg/1snYH+M5/E2PCueyHm3GWvS/h0irRfl8Rm0OdLVnp7x4TZz9sE4Q8VH\nV04jW09rTPG3QG1yQYvHFA1a6ZbOvkxfHfSIZUx5JfmeI4JfKPBppDXl5ZqS\nq3kueU/opCOXtZ/tODgK16pOTMdEMvr3szmQ0+Ln9JhHNkNnaiG2smgfBFrS\n376OHtEDFMh7iNObk22J6fSE+xuOSB0he/dYpcLMiBy+U8VGK56HkaTjU0IV\nBMqg+W0tfMGNBH4Dx1ZM2gQqxLkUplqd1IRlu8nTzP7xwexMqL4pCTvcb6iK\nEaUqsqjxbGN/OVehcJZBlD+aZn563rAX537aeNLHPLciQMndu/WzlCaSM0N/\naqN+U19ov3ZwVC/v3GvGfG/2m25YWQi0qea2rObPDIrMR+f/lB/UP8yIw/iv\n2EcC6jc/M54bGlC7tbnOdFatWSj5RcUY96y/W70Lz3gG13oqKRw89uZxglZ+\nVF+Pq6CsXZJNeHuvks7tm5EB7IHgbaXb6W+cFrPoR0T7U2xmWxGlvl8VqOzi\nH+LnWvyvg+lWe/hz6NSOGjoVAIac6qjOSYIMRI1v5OrLlyrKgbZ5mS4I4FnC\nNi/I\r\n=D3rH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLuAO8yoId409wUd0BOnwA0ZTXj6ECkn/ZQjmcNkEdKAIhAJwSKY/ufIGb/TryBkFPI5LYcLDim94TpwCwENqLVGk6"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.5-test.1614896541538_1614896556117_0.7252996304558161"},"_hasShrinkwrap":false},"9.5.5":{"name":"ts-toolbelt","version":"9.5.5","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"e28bddf33066850a764e2ba344883ff84da561b9","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.5","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rWfnz2lTylV2t3s/ydCCVCt9bI6lIEcZfJ8FbQ67NsmDAtQKGlxgq751T8nlK/nHpAr/yYZLdA1nygAhdK4ewA==","shasum":"b83da5a9e71a0abec847f650feee78102f62aa98","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.5.tgz","fileCount":246,"unpackedSize":250542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQV4ACRA9TVsSAnZWagAAZvsP/0ubbddtQ5d7NwNxkLUP\nT6qaGsQOu6rfYhbUz1ME8qmLc8XlUK39E572u1sKzl4ZhgBi3sU+WPG+3jK2\nJEeBlUR2TfiwxO/xdiL3Q0HjBSJMqB/h6RxT4vupD4BWj/4If/OrRITSsdgd\n48L4SDrxGyQhpXSf+zHb3qDWsnwGk6GNyOFbEc1MGaMwWX8Wx+FBpzb+syXz\nysG5swn8KBzJZRAHkDfCFWrhWlzcyx8TfdgFS8P4cb+SIkn+z6IL+vad6x7S\ndC/f/6PP002Plz733ZGZey/V2sL7qR1F2nJXeymQxXXa0AeWEKLLHVZrKweS\n2M6kpqDScSRvLZ9uHzcReOGcHHe/N/vIwQSW3Z3PD2SU2+HOgVf9wqjtSCBW\nFILFF2fR9o8FoIf4tiRXhqQpG4fla4G0aAYakRJaD6aeqXPd31Qk0mpG6kAS\nzod1MW70wgZG9TxWwNmNIikShvtpwLyo1KwoYLa184+v4JOqhbV/1lCeUm1K\nHBUVHETrQPKXpNJUvFRpQB4y1K/HhhoRCs3VlEwCPwyhus+FAUkmeKwOh5EF\n3Ufzwz52PKWRJBp5VTGHHuSbg1jNOh2cLwO5cEif2dTzZL77VNnofgBrmqOs\nR+NPGehDN8/TQQXWkUvO6ehqNDMa+PBsplqPTOCV3XoKPt3QGO4JlRpoclZO\nXmY5\r\n=8g4V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqqCU1b9meNP8OToXPLtjpO2tTdRRH4AFsqsO/f4ihVAiEAjg1wAzw/8GAwd+zJVtO1B7SD3iu1rfpjRcmQv7IWJic="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.5_1614896640237_0.3133446832968594"},"_hasShrinkwrap":false},"9.5.6-test.1614898387551":{"name":"ts-toolbelt","version":"9.5.6-test.1614898387551","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"b8e0d0a83228baf666e00f4fdb0d99ca936c133f","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.6-test.1614898387551","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-43EVLQMxwrdk+5yqMygVXMeoBJGlaQtDRxkDfr7BJNKv7z0F51IZM47JF4EeaQ6LpfWXv/3SoDbjNpltoZxPSg==","shasum":"d63dbef3a383782643badf20ae6d3d64cced9fd3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.6-test.1614898387551.tgz","fileCount":246,"unpackedSize":251984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQWTiCRA9TVsSAnZWagAAu3YP/1T5PB7Ajg783KcwS2v4\n2v2+SWXp+nMjXl2liVNe2g8SCAAzcLfacACUn+KutSe0J/z/oZKaXSRY8mxZ\n6wcU0XFAR9GsV8+BN0s+kwyeQrV3CS5EO6hUrsVT60SS6PCnaWq7obAmrxfC\n65KITEKkOs1HqEc73Xngthx0ciILqrs3UILrPkkwftBJU7sfOXW424b3tppD\n/0BlxrgE0iV4lml56rHPXcDrzdeQUYN9SjgSpObRsFvzqYsFHjI1iZbtv1QF\nPDdI0E/+HpJuAwMdDAV4US+QjDIRRxnnGXEd4hXWZqo265tCGSeiqvbo+RwS\n1+CkxhycmsYcADuddnqo6NSLQu0LV+COSwcR2AFROsWZLitBEXfzJECS+uyt\nn0VbBHRDcHq60YFtGDUAsyQYp2bycUxdy0GLe7xonWtovj/6FQUkyyu1/gy8\n73EJ7IHmn1hJzbP1Nxt9ZO9I39OiUB+RNLkzHGKtFtcLm50ORz+OfiHjP7EP\nzFG4WDBfbDuGaqgN8Jj1PdLm5CEeyw1+LOltXsN/YJQGYOAaME7jYwKG0t9c\nsuvDf3rDQjsJ8ET8W/PrKBXw88LpZ+2wx+QRRr973Qekxve5LQz7kI7mDPHZ\nQKkNp3YDymEtXAz+aHt96ZvSmQl0yESzA/nt/QN4j4Mwa8ru5AiU45gb5pEt\noH7M\r\n=LiBv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWCxGPJ/mr/EuE1Rkg4gHioaauLkirNdsZ7UCcoYO7GgIgCYTN6ozJgtBfwZ9Y0DD5qxusG1ixp04qzqz3CVj2MWc="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.6-test.1614898387551_1614898402359_0.1928912210085305"},"_hasShrinkwrap":false},"9.5.6":{"name":"ts-toolbelt","version":"9.5.6","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"b8e0d0a83228baf666e00f4fdb0d99ca936c133f","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.6","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IW3K2rzaSeAbm8V2C/phDQVO77h2cFvqKFhP2QvxEbv5tOkXGFhSrvlCL/5xRah4p/4IvwvxG8EOnHsEq9vmvg==","shasum":"cb85870297be8f6b7f089c67a33e671ad88a9437","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.6.tgz","fileCount":246,"unpackedSize":251965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQWVACRA9TVsSAnZWagAAIAcQAILtjC456xomkrPhdjS3\nYwWylWZ8dJVCwjrjhlgfNOLEGNEBpFbFANCF8GjPqjhkDFO+mnSXJcy9Kr/k\nfEjsitQf+0gmJX8wWRrJXy1Gu7qzXHlk2ZH6uAmiUeTiWdiHPB1Yv3NIOBo+\nUazeZLrGpV/eCCcBrtZ+Z7uUviFueVI6zf8h6bzJ6zJcKjJ/1ri5XnXGsvsI\n3nKPKdrviNGHR3cgUyGrmAfa/eoLrooeoS8BMCAhbFk9PKyJLVayDGBcGHo1\nMhQJxWL6opTYWFOlSQgmXnlqoRB1v3NPeQnV1YEI3AbMltZK2CMs0ydvgXSJ\nxHwqL0aUWJBY2Giq04r5fwVU/b5EmC7ITNXvNtj7xT9O6Y2cp0XkgIFdpXH4\nF6Acu6vn7AIjzkVfWe84kmZ2W80RWgRPnXWNYihSc2WKY236u5MpO3i1EigR\nnZWodBVuoG02jLhOyeNNg2DkzZB/wstX+Ho5kTDjmA5VjZK7Q+kSCaUX/DBl\n6oPhKUpVnZChRgSwP9MtSwopAWOrE4UZ/tbwm6wCEbsITwiWkaVQEo5/WU35\nqNruW4UcVxltwBRQKg6uAcCUtm3Xpy9dtN8VuRi9/OMNJy2MroJLN7oooYlF\n/La/amgwH0nARg4tHh6xWb/Tz1irHUvo+ejyy3AYWIVAWB72m/hbtbAfFHfL\nWVt8\r\n=7+WD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZXkRn1lzvzgqRDtWjq5KrjJysMv9h903GYyUsC6YtQAIhANvN2E7I45WrxEFjWfScdTYbPlr6H95jYmbajd7F0TjU"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.6_1614898496021_0.41579063422258655"},"_hasShrinkwrap":false},"9.5.7-test.1614905356046":{"name":"ts-toolbelt","version":"9.5.7-test.1614905356046","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"564645547862c7d698f4a03b15ccb7a5ffb5fc29","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.7-test.1614905356046","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-gxu3gj1ytGYFJcvyd4aDkASR2Yx4evWQTxrG34lb/xY7v+t0gp44NzeeIVFRKyx8lYodOaxdDLWxpGsph/zicA==","shasum":"3089808309026f00499a0c3816b5a74b6ba756aa","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.7-test.1614905356046.tgz","fileCount":246,"unpackedSize":253630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQYAcCRA9TVsSAnZWagAAOjoQAJgJtIOX4XPzUxXN5PJt\nGC6NZJiog1y49byJBL9N2rXvCLRd5rQnPKSixOmOaeBLScrGycBQk0htI3VN\niAykEeYBbyQoNZX4zTo6UG8Grao8PJdZN3ILRWhMLGlpo0gxbjxC50EjOYhL\ngNG5WkWHQklIsqi2BZHpdDyo8Eu/q8f/BqFc8hw1oHpZdKbRQeiwQEDSnrY7\nckyolFn4ELwGD2WqMTckNzas/btUmlJ4HizNWu2y1l+dTJdgUPL5E0Lx9JSq\nYyWpWjS1YphtKqIR950HUD00fuE4cdofae8kk/VO70I43YGzTGLAPqq0/WJc\nc4YizVYsduuUzL9AUjnJ5HihdCowlz4Bq8Cdt5sCBrJwtAMMS5WPcHFd90TP\nXVmcBXqKMiZZ/jjiO2F/XSse6FzAMX8XndrPP2/zX9wr9WHz2ixpCdwTVxbZ\nF2E2TVPal55et9+zEnzlC3PhAOKOXezfP8jbwAW66F98PzxgJIOVC90SuDe+\nBCZMun8z0btk/zQ3BXyIZkQYhAn/3+fmf77fPDAy+uqgYzyn8C9Ras0DKRkz\nS63CSN2wsP5pbIvG89U+dmNqsnTsjcnDzFuZXvj49eQSHUef9xiSFuEtc9w3\nae8lVmw6OtCx+fNWYmDp2ITUhgtGtOyafKFRxPXFGAJZhlBCsqykDFxAV+rr\n4Oyw\r\n=ioLy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG6qezwYzC/9vSbSISQKZ599qR+ghnLsqShYLZX68HPxAiBEQtKKmrizqCwilQQOuh+JcXg1xZ0qO36qaOehavD3DA=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.7-test.1614905356046_1614905371573_0.133002647702277"},"_hasShrinkwrap":false},"9.5.7":{"name":"ts-toolbelt","version":"9.5.7","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"564645547862c7d698f4a03b15ccb7a5ffb5fc29","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.7","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rnPDspfYWnfWnf7RX54qB7nCQ1u8MpI2AsqOne9aOrggAty2iLvft/yyNLkIbVPhNTdP4rAJH56ixCKet4R76g==","shasum":"3637255e59476a8f1d188f9ef6765fcdeb4b6cd2","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.7.tgz","fileCount":246,"unpackedSize":253611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQYBwCRA9TVsSAnZWagAAMasP/1r3etIt0Am4G3Nl3CmU\nSOcmh5Av1t69ObJhsWQzNGRK1Bu6mgSsgWvuwXDHx15MZjB8C4ShMfwlyzWn\nB5GM5Jx0tPcXAUAS88AjnV7zK2Kg2WGCksXCtZjD0HAjMW0F+SVr/bZTWcCH\nP1goiUEhauZQXdR4XIT3tKwsc7/0tTN4QMl+46g8nJcfXgwb6zt3qqyqrLXB\nAIqhgM8WamUtZjlC1UEEXLu1Cy0o6I5Byyv/H5Ef2IIKLZQc79Vpc+BkOBLH\n+j0FfNbrp4+ygRpBDa5ody5NtTp/dl/LM2gz1+xUxIPVd5awn/y/irlYcafy\n6nhMQQ2K8iH8OlvReP1tq4+4KH4TfyQgsgBRbO3cd2fXTuUYiE5lNZZBHf0r\nMRacixBAjr2CD55cPWI94LYu0UWJy/COp5PBm6A7lR/kE00Dm5lmWI8TopeS\nn/xR+gi+1Bvg15h17+1pIHGPTzD0iMwxKntWOE7NoEyqV7j3AsuL47/7XBVa\nRouipYlir6didJKy/pA+j4guMWWliRnqtUgVa1H/xzNV9tBKuprCq+zeMyAQ\nGnm/fvIaDPuCALAK76cbfNWUJfUwMT7A4hHih3dR4zjNwWupxJumiGWOAsyS\n8YIN78AUTb5KPtHIK3orVtQIYYRHMnzJm2yTkUOhoYBbne6TEciK9jQ4drDH\nG1/U\r\n=0HD1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCczfItxRfan0NHEiezz1HQTIJ8fGiv2NGr63Ny+jIxEwIhAPz2fisOzZMJ1o9l8oGibm3Zw/MuHS0DBOvXlwrJIFxe"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.7_1614905455456_0.02090938901143491"},"_hasShrinkwrap":false},"9.5.8-test.1614976760638":{"name":"ts-toolbelt","version":"9.5.8-test.1614976760638","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"bceb8be67701f9c7aba9608aed851567e8118ca5","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.8-test.1614976760638","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-k7OOzVf6+VZ7Omf3T71aOC3hjDKFnGxrk3kIRFvnecgvmVXKPZrZV8ti4LnwO1e8jm5fwvfeYfpG40LsBf0MTg==","shasum":"6c8c07763224adf7d068a90141ad21652bfedb67","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.8-test.1614976760638.tgz","fileCount":246,"unpackedSize":255548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQpcICRA9TVsSAnZWagAAr+8P/070e8HM42OcqOe33KKf\nkuhT8USJlfseoDMWonNrm9yfDAn1NXNlLyN6C4E87eHadMQKNXy60WEJnwO8\n0GfiKnkKsvMo6AIbNvRtOMsus0ExbcMKp67Aay121+OFkZLRZ8YbmAW4Giwv\nn5LDtX/cHpUKA0RbM0cRPh4gbZVpX7gnbPBbkMbcU/KTcd04AbgUGpfHYcGv\n74UlXqItYEe8CCZo/ege/KSo/89I2Jxet1pUI+R3pdEjp3r4RS1ypoec2ONK\nXk7aytD3/+gV82M7EfCqXHSHI0yU5rkcIJOgowIFH4wG2fLnxSvSSWRpi4As\nFtW0PEwOI8Ji16qYDEGqvxYFNupcFMRA5Kd5Ax9Tfk1ORkR0bYyRXwYxZhiV\nIXR5ofC+PWYAIuE6LYnuDZIw6eyzrjevnUY0w72MiEchK0fGAatsAl5u/Fj/\n77KPHyoo1az8OU4WBeyv6hbM/AcJgEa9AMHSTAFyTriSCTqpBxQRwMoBBw25\ncbymUcgsXbeh24QU0oZqB1cdmp2NckNbOVur+RO1f08IBgx28oOrAEbkvEAJ\nFiCExx55e31xgUmdWnSwolPJedzB58bKOx/p1zoAK1iy++DK/DOKXQ981yHQ\nc08hvwJpkmUk/byswstCkfwSEgnTN3qYwR93/iQF2+MXPmMGofDvIha4Y2es\nlDGN\r\n=cKtS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFocHzH9BG7Qgqa3yQFwtUsv56ahHltSSVQBV7i6YvoEAiEA2WammYAGpE2uRUsAE6BXgbggG9W6CDLfYgU26c86tJQ="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.8-test.1614976760638_1614976775875_0.43055096369417223"},"_hasShrinkwrap":false},"9.5.8":{"name":"ts-toolbelt","version":"9.5.8","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"bceb8be67701f9c7aba9608aed851567e8118ca5","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.8","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-91ZxXkvByBeLRYI2xsE42Q2KWNMeSv3ZeZmTZ+8py1M/iPNw0g21cTTXO28Q4M6Gs6hQQfjO4by2Ayt1q23eBA==","shasum":"49b8fb34f07be91b3663242de6c6e0f8da7c1830","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.8.tgz","fileCount":246,"unpackedSize":255529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQpdiCRA9TVsSAnZWagAA4lYP/1vYbKyKd86zpzHqsxQw\njUBu1IIFF588ZCCUZzPCFH3sC896uRUsnIOn0KFWEjRVTsLaKCjvcEy7Xd9y\nvQC0/9hhjQsfXfevhclgO/SJ6gEknCL189lfAmDWqUMM1TC1nhkFDO8d48zw\nU4/8VKeJp83kRepAwccZ7MJc7I7GcEnrr+PCE468jHCOMeaQpIoCkTSTLOZk\nLnzkDhw3TN4/h5ALivh6Kkrp3IW73j2aTAnlLevCJRyUSsKBbRFVXK4mGLkg\nm3BL216rY/Q9GsTGtrsrnNUeqgoFqTXG0+u+GUsP4GabDTrOVeI+LrJxgSn1\n2egJfe+MS4ULGx32yBARJLSDmLFqkGBu09DSjgXfDpCw7vHNQ+eumS/6CF+L\n/mhIiHvaGDUWAR+4pBD7VKiKn6QwYeBQW3WNOLrCj/g5BSq1fDRDZOB2rD1o\nELTR993RqtcgMNBWGeIapVIyA3z4sjyHA06sIZnTqnHZIv9I0/Y7iXANnwb3\ny4D378x6IL7FXR/QEoEgoV5u0RIoCAk6NzKS3Bkq1MWJlotPbQfCqGRD58mg\nIbCqEKzPImo2hRKlakfQpIehxhUgIqNKHew8cU+iek1xG2/trUcVToAnrQlx\nXWFTt54q82r8yvAsYD/aVjINGRGchX98+AvbPYoCwgU/POR6oCyXs1HsQMt7\nf39G\r\n=xo1t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeQ0BQuDswhEYgV4wceLbeB6czA1vX2fUImnyr9Tz9fwIgLKoUMwz/+xbrp77OBWelEqM/LyfThx2Ge8X5xSWVq+s="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.8_1614976865611_0.3121655045544034"},"_hasShrinkwrap":false},"9.5.9-test.1615046858023":{"name":"ts-toolbelt","version":"9.5.9-test.1615046858023","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"533a6ac0f7b713933c94f0962166c7a0245b055e","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.9-test.1615046858023","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HSFlSsbDi4fYawLMS3feCBA0suvU340SVMtX49wg0hukBQVDWhKTRm3L/g4RtczPJv3Adbh4yt64N2X0PYsiow==","shasum":"3b0ff5a4b2d995471005e2e760f0e99e477f3d21","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.9-test.1615046858023.tgz","fileCount":246,"unpackedSize":254123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQ6jZCRA9TVsSAnZWagAAFFAP/Rw1jt38nLQOT3NIbWFz\nNwqBwh/WBbm4w5kONZ+5/6vq61peR/up6Izl/G06aLrvOfWz4VvBLZJnUosT\nGsMLyU6Xaz+QqMp0MWAzAdSOJRbadSo4rw6QJHiOyeB9pN2r6pf+pEawcIzO\nb8XFzFYMs1Ub4qlAtO3Q5Rb4m3k/C/f+Tyn+oQLGK6xz0xk17fLiJK222Epl\npRF+YgNKxbtb6H2rw2oZ4orisU2qgEjjIyaxCAlJcx5Rvibg3RP1BJ/aGed4\nrQ72P6+0V8bQ0a4qnY8HffHig7HKCgxV5Crg0WXF/IfJmgwExCaH5R6yVnIP\nS69hzDCQOwjcGawzDQf/A4Whg+XfYE2pXRNiDevKbyViysLgvVV1vp/W8jpl\nu4lYpLSiaAuNRj7+KK8ayAtT0ihqHs52tAZu9ITvWh+P8Wa4KonGJU+Fywdl\nKnNWILlgsIWsdHqtKeK5GCUPuEuOSpH7A0DhMe77GD5Ilbyt31MSpdPWpPPI\n7M17mShlDanAId4N7Ukx2TtAqbpLeq8sfyz33+ztHAmjwYamaNgIKfRRKjlm\nLTKyT1DyBBxVsbT7hcD9UP2/Y4d7Wlo3axlqND5WVZO22XZX217O+nX+Arqo\n6dUl7gmO3HfEWKHFMcDQxFYuWOhQttPXM2pT+/iX1YM9xr+eu+wK5LZwDyOL\n6rfR\r\n=I6wA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzw5wyXnwui1mx579f3PwL/F4tWy0ZHRwKq85rRWeN3AiEA3VuhSn/eBywo04LTwzFrmRllq9GvlVKNwQ3BlT4GoUc="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.9-test.1615046858023_1615046873018_0.6648428686418841"},"_hasShrinkwrap":false},"9.5.9":{"name":"ts-toolbelt","version":"9.5.9","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"533a6ac0f7b713933c94f0962166c7a0245b055e","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.9","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-yXJc8KR8manZ/UffUHcR690TPWqcyvmPgOMdY7FOncs5R1d9cqXr1uFOhaM+esZiIL0q0PM4wmTaAj1CuvM7Dg==","shasum":"72bdd57aedb537ca2e800433d47bc3fb7ace1009","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.9.tgz","fileCount":246,"unpackedSize":254104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQ6kxCRA9TVsSAnZWagAAeT4P/Rum/Bqkr9mrc0vrXlpn\nJQlEQrPHC6AkIp18NaE5Y5LG/ygr7X/y6YEeZZybpaD3E6SYy2RNmfaPX82h\nG6HbWE3sqDQyjdHRDb7GaSqAtHm7PF0rvHhT8jgwzFDrj1KfqREgq14WqHyX\nDz8EEt5j+tKKY5TaAMJQJwU9WKAqNDqerJNtW+Ms7GZquqfHw2huwMfI/JI7\nI6ihchHW3vJP8wxEt060w/CJFKcJGffAKK5EH6Pd++KTmJ+oWk0vGrAKwM/3\nbZrS+Y9oMk/NK7XvjpeHDTYWrc6hHDXm6WvO7gYgQsVADeMgMAOwdKyzxIy7\n0uqpH9Ko4ND1fjzXECwKwAbCM+O6AjwpxKFazfMhlGE9H8vu/mr7ZIDeo1We\nWkl5IHKQrCtyV10uxbY2nx2H/H2UXJ9CQTqmBxApPeUI2SywDtzU4ZaZcunh\nR1aJ763GSKpCYKdlWrqWjbHdy7oNKDo1HsIuQQV0KDZtZ73fTF38fiF8a6sZ\nF53tc2MzVShD/GD0wg+oK5yjmugXXnmWPxvibQC6wEcZqCETQP6UPf5YQeqO\nywrFCdYzI1uuy3+hnY1JepiZq08g9V4Q2gWHQglx7xMlWMF9FI2scbjxcopd\neYsYU/DSYhdPUQl21WKTIRVwvJs6+y2vT2Q2lw0QIkVA54BjIuCI4zmXdWm7\nWk+N\r\n=/aaO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID9ZcJCWjhwc4noEQojTWp1NZAbs1W/ZCVjWkHFdMKEWAiEAtO4zlan5X9b70riAQfgr4LIciR4yl/b+QWV11Q+RX8U="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.9_1615046961360_0.21763880997073848"},"_hasShrinkwrap":false},"9.5.10-test.1615048141230":{"name":"ts-toolbelt","version":"9.5.10-test.1615048141230","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"1f3928a70ff2a7e903a5398b53295c9c9997b42c","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.10-test.1615048141230","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-xnWni6lTp4BGX6k69vsceJ2fusLmFcLT41cuPj+cbuRrG54mWuaBG39zezI9C9kK9m7m2XP+5ZJNcCLjaZ/JZw==","shasum":"d949cea9ee060349701f080a4f297a9754c7a355","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.10-test.1615048141230.tgz","fileCount":246,"unpackedSize":257102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQ63cCRA9TVsSAnZWagAAKm8QAIm7PvPclZBBGcl806Yx\nRQ1YvB6Mvj/Mo7EUxu6b1k8HLJWo5a86kfji+4hjvlXQAn/ityYci8SvddEB\nOdnn4jHWDUpXxnO72vMhjpyc2rLRyuOAwpgsbrs4hg+dSp661lKsP5EM+GLJ\nJV+Zfo1rKTLu+nJTTiWjiIHozLpEWOESXNjWlFxB80gyDd0LzhmxwjgDe0js\nUb+nQ1oEZAzYohVNgT/CokLApKwfpj8OEcS/TKyA2X8pQxKeHnCbZNUINLHJ\n1MSJoHp4St5nSAal4XzlK5mREXC3lzL+ayrwWY4cOAs6sAaBNOSvth3y7GmN\nWiAavtpFoph14X3Xv82iPBLFc7/XC/Dv3nF2Pbm3QCAXIa4uf8l/WxsxVWW8\nJcFCoh8v9tTdtCtteHkKK8YwoN9OdHjC9B+dC9bLNDM/xS9eyeKblu0w0O3E\nim5Gl6oszeCG0P3rvE7FtVGrGsv3D/7va//2lLfJGnj57iplUQt85ziQ7Nfw\n+5nitaftD1l+l1ZeJ5BCzsPQDBVbZEx3RiOEwnfdd3ljYRYVL6sfxjWmw36y\nw8clNprNaCMZg/fH7OXTIVIhKc0Jyh5e2/N+PdtEDGiDeZo0QlFjTB6dVCLG\np1lf2iJW84f996CYarEXz3HzJ6lkmmOfsvgZzoLJx8XYaYWXOdtwzqUfrHGN\nFInH\r\n=0dYx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVTJZWLi010U9X43gbj4BHBjH0/ktAXIUMXTDDSwlJugIgXHi88yhzvzDD6hPKQ2dfcURQtcvk/7q502IxxRES44A="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.10-test.1615048141230_1615048156008_0.9190969672325016"},"_hasShrinkwrap":false},"9.5.10":{"name":"ts-toolbelt","version":"9.5.10","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"1f3928a70ff2a7e903a5398b53295c9c9997b42c","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.10","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nyfx1+97Bl86XFkHYC3TyM0IP2mP0Yc30KbZod9S6VaUNC9aJl4kcKnjKopBm+GG1TjOFsAtRbhKZZjuji86wQ==","shasum":"4e72459aecf40651f631f821cfff1eb690611d90","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.10.tgz","fileCount":246,"unpackedSize":257083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQ65VCRA9TVsSAnZWagAAFgAP+wWcnQd2S9HS1ycvBNyB\ntXl0rewiM4Y0XB13FMlk519jIWk8YB4mAlkpe9Gi+uBgMWH6bP3gWELcHAW5\ngObx4sj7Yl41WVoIY9j4QSvHvOiui5DhPuvjenCGLbqjCp5FdEnIN6dJlwHp\n4bs/NhKbrK8vVGqyAEFjdl6Z0I26npvj2Bu9TTXvG+uVdDqu45JPzdkO3Lns\nUxDLRYtxnDetr4eoap9bTPBhLjurXLTTGDu+3QUqo9ye8O2Jc7N3p/fP3jGq\n/lI2ICQxab8cmwlEPGIdZLzPGwRkn3m+yjsxN5fei1blvZZBwMDUHBH+bF+0\nAVuJB07rrNPpwgknKgERtZ/ki0vCsBKmWjBVNsuH51Lf64tP43eiqxOdjFlH\nim9MNjs8HhlruMoYtI8vZ93AnEVhkjIVuzcKJgoMCcJEUp0LqCp0b6tKUC1L\nrvOXHxwED+qSHnA7xjzxYMavI3WgLwHt4ZrkQoxtS1pvkcC14lD3Qm0cGRuj\n2jvONARkjgye4OBWtLHfj/TTYOYaoFUWMZ9pK0OyGFWJPaclNxfjvfX3Tjv2\ncPPhh5IWkIwI9kMF+eJHHD1z1e9ZFvKODocsjwLfxB8IXXK5Sx8Vuy/Z0l4m\n+jx6EA0GYxRhhJVmBioW9nBcCLgyza0XAX4gpVw7EUyt6YsmIl2SSvaeGruR\nmt+M\r\n=n/qm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICXpQtnHYdPFGEpivhqgwNtqI/6Aj0jPr0TDirzyZJmBAiBZp1rEnj0U9MUmAThEWZggUrwzDEWrAYXIHVwkSwjetA=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.10_1615048276600_0.5262161278858604"},"_hasShrinkwrap":false},"9.5.11-test.1615378342109":{"name":"ts-toolbelt","version":"9.5.11-test.1615378342109","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"bde9210d0a361ddb1e03920a0c2bd42dad17ee30","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.11-test.1615378342109","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-7dALaJW+BwGUjHnYytVEfrufBzpw03riq5/L3ZcP1hXHa12bG3G+djCQ7DdgOgnBgXOyJHYKP+2jvoZt1Eb8/Q==","shasum":"b831cc51e87587afcf16691dd15bd649df77c96e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.11-test.1615378342109.tgz","fileCount":246,"unpackedSize":246715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSLe1CRA9TVsSAnZWagAAyoYP/jpEmF7uCVVSrvEwyS8a\nE2U4oa7xBq9MUADGI/pYvmxuDl1Bq05zhOi1YV5I05Ce/JyjbSSzM4IGAcMA\nRGiqs+13ibCdkH0OmJ9b1ouWN33r5U/lsvIniuiUMlv2x/HKqYb3fa7q+U0L\n7r2NmXHUbHEJYveG9rIXqwng24IF6rVtj2bovTeVI72jBAX7iATOS/HdLXzT\nH2ZciRP8gRo5KyRZHhRuZ5v3vtiOFCxibHtTpSdUP21WXucWA88gJEhOPPAh\nXhVOv3fUQQ/vtShrpkmAFZBHQrv9nweiFhg5fWI4P/TRoGpg4h66u/maMkMw\nfDZlDCf1lkbBqbTJVTwjgzrhlQzh4BzcpFbP57TxL1WBqM0LuOpaeol9R2e8\nb8yqZx+AOg1CNVycKDU7yQ45lsGwCwu+a09dp6Pbeevc6I289kmzNBBxbtIk\nRGsGPxlrPPkSaNNDHnRE7vuBZxLBRickGQu1KrEwXFY2St+Swlv0Osp7zbln\nFEik236tvGsEmFWS+gPrN3JobUtJ9T7STe4Kb7KU6N5Up0YQu0Bk+MvZaSaF\nG0D4dkv3jlSMqwyjXYXedxJVSpx8Vn4b4LvYEE4Wy9B8meq0ZDIqs89lyiy0\niZsz0nUQ/2WYZh8c/+opP9evDc4hGIkdnDpHr+L6wR8SeL2yitKRDt+pvz35\ndTQz\r\n=9+zS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuw8N0ktogpXrnD8292Xmz6OEX2kI/S2WBq14WioNB9gIhAII/3XyDSM7KtcARBsM5+DpE3zoHkoR5aysuJnPASX+Z"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.11-test.1615378342109_1615378356534_0.8252119961122046"},"_hasShrinkwrap":false},"9.5.12-test.1615378426296":{"name":"ts-toolbelt","version":"9.5.12-test.1615378426296","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"80579e1eaa17b2d1c61bd7881d0ea6ff94753141","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.12-test.1615378426296","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4y9ycBxY2mNyG6t387vrUxsnQCBXY2DRPnizmVxDEHDFCV0DBvpefEBt6v67I8jh2/DIQm1DCvVKQb/Z5ZNQHQ==","shasum":"d08828b8f42e1db3f246d8bf90e210a17d6a92e4","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.12-test.1615378426296.tgz","fileCount":246,"unpackedSize":246836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSLgJCRA9TVsSAnZWagAAjYQP/28lFkTlFrAJU78xtIpL\nAah8bJCb604yR26/GfmOTA8SRILId7UNb99aSFCMwEwY955Sa8JkdTJZ3NZI\nfRuh10jaoGwLxZWa/laKXCRCYWrDGgEirn9RVFvz8QlfTJw6CFBHqIDabUBT\nzThghSn9y8L12cSWgtMgI9dsUKXPo0ODVol/yJ0Yoe4ObmQ/5hl3ExKC7p7X\nYtZ4KbsB67ketJj9cnWIRJebK4LPs/hd83GMPRu06haqWw07iAU9t7Ai+X8L\n8kcU/IoQtOR4Nbu+XU2PJ69y/SldRQjvG1UI5oJcBH2cDMAzEQP708zpfItX\nOSwVuIbPGHZky6gQIUpwdkykQucq+G0hU/XgA2werIIhhPeBse+TcQ7TBBh3\neB0c5U0pIG7vq5mN5Dvh6jw9pxKuL9MiXFBk41wx4kX7YIK++0euwMveuXDD\nLjxP9ibO0YbLmziO+zXjymnWRq829whxzoNRfjY93CvWchtTRly6yTCy7B4C\nNg3J/mWC0SriFkrWaSxmeXnexwTtKeyWyvGsVtrjtBKOnMHkAD+UemTfO++/\n54sGffXXC8USMMoqYQrsbjGnbqfV+DN1k8oQVihzsG4XdaXBz1qyTj7xL1oC\nZZceRYZFKLkMNL4JkXmjZnp8JI21zdQ4DjLmFbKADJxiVFvyDWwgj6I58QPO\nmESw\r\n=NfGH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1XmlEZWAcNda5NXDCCu/asmZx8OGzb/kgU3BSVK1+dAIgWhacMOgWqsAgrFFg9MOhmZJFnHIbdOc0DZv9YQb37uk="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.12-test.1615378426296_1615378440673_0.7258961143756675"},"_hasShrinkwrap":false},"9.5.12":{"name":"ts-toolbelt","version":"9.5.12","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"80579e1eaa17b2d1c61bd7881d0ea6ff94753141","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.12","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rqmk3y6kMlB0UB+TL8Jzbffmk+1v6i0cnspaBSI6noj+e7x2r+tbpYgbwxtNJJ6H02Cg+Gd9Hhv05TfgGq5oTQ==","shasum":"68ec24d347a81a1b338a5cddf2142a2041cec6b3","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.12.tgz","fileCount":246,"unpackedSize":246817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSLhmCRA9TVsSAnZWagAADaQP/27zH2mAe+MU0e+3c+vp\nQ0rEHKSDuIXFdQ30KZvU0bCYD22NNHuT0WH21dc9sO5pzwXe4XqD+oDRYZgP\n09p6tQLKmOBJjNHWOplJ8HVQ7LzTcpdBpE3+o0232UBIq3Z4SctIrxEho+8d\n+3wOemKDbqkgvRy0VDrAGmrexlvwuhX1eGx01mSEjlyOxJvDWvPe//usSbCv\n6h/F1jEYrmUuUOnnq6aAAxqHPI+ACfTm/Ocxd8n2MKvGRoKbhc+dJnjGWQyX\nx6JE3JLN7qDtAA4MRrUmG+wS/TNJXqFmlaS1JiTUbZSAmQmGCSD5+/X0f+sP\nSwM3Z2oGEW4EFOESmqfoG/QPL81Ma1dY7HSerRnmQOKDsT8yzh2WUhrH0FTa\nqmUl02CzdCTjrg5UiiK8z2zSloNL7ES+ORtFEIR/BVxz8zRgr7tizhJevWYq\nSIAM7wIJzs5jwk2a+Eya0F4mqPgcEIp09kM7xrqZ0fkYIW9ucZPC7riyCXPs\nLR4AtK2ppUPjuEuTTGMOP3v+kzmnj/ZQBWG9B62C+Yh4XJW/+G4IKAx8HfdD\njTWSw98yjFC8IIBp2/63EEVoeFMkUkVPYGQ9kNmI9zk6m6OgLADhN9kjtRzh\nN6a8MeD34fttgq/Qb9Yeu2kopK/uCMnTVl6qETQuUjIpKLOHC/qYZjyhulBZ\nREAu\r\n=OKh/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTl2+StWfHEIyDnpSxh5Ymuu41/Vm5D4WYTWxmRKYX+AiADV1jyXstgKz9BdrejOy1Jqgp13qBON/a/zoq3jd7Plw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.12_1615378534277_0.2690305638753743"},"_hasShrinkwrap":false},"9.5.13-test.1615391047592":{"name":"ts-toolbelt","version":"9.5.13-test.1615391047592","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"277a6e2ac5ca8be2bbcd7593d987aaac3ea9bb75","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.13-test.1615391047592","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rMhWJUY1uGnkSCm5cUhw7X+S0hz5Kno0o1yaEUHhcSu44pP8wG+US//lg8rj+dp4kGMfa7/SasVHE0+KQYvVmA==","shasum":"9e19503eed8e4969a088658a191430cb9700209e","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.13-test.1615391047592.tgz","fileCount":246,"unpackedSize":250597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSOlXCRA9TVsSAnZWagAA7loP/1pDCOasr5nHVejUVHm7\navFb6iUw/ur1dXA7+ctgVTfvMJl5A+M3UKRIptR4SX8d/ewsKBbjcQLgelTy\nEQFGVvKG451/0O/xtzoOMV/kFoeTq4AUgiEAGlkfdXD654KTmfnfbxBpn5dX\nymAo4c8tiCcTQS7+h+6zTrts92fJjPAgpFJZ/nB9zAR5OhddMWlKjWCPi12+\n3zrjPdmns43Cl67SjoHh1XP6PgA8W5zsJ+7BUNok882q6KLwiWd/0AfSe09f\nKfu3tzqDB//26Fz5KPzsQAovlk22ckpWkPcHSDZQ58uspKcp2XmKc+UwtmJJ\nrr9JNJpMbnXuRUjpKuYVuUN0C9pGA9X7YI033In6nOzgBanOhbnXO7RoQTcw\nmn0b6QQryEQUvrRaV5Vu+n0w11STdAEq6Sf9QdiHkTNN7anEDFrMBDL0VoJ5\nUFKSvdfBOZhZ1aRV4X426kIlyTb8D0rMSMM5h5h/C7HYB+Qpgfmrr1ncBGhg\nd6NQpRkbsbLHl4b2VhoeijOfMrNJEVzXCZna1aOGMbRrS8wxlVcR7VTCGnwY\npySj1WhOV+ph89HmgI5VBy58q/4vHorFVZhUFt8GXD3pYJMriyJJj9fBOdyB\n6X6Fh0hiCtm+nBmsJF6wZW98PQoflKKjVHrySDztQae/RHM+AvJ4HRVg8Inj\nlXiP\r\n=qFxb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBSCtu8zCKl5hkjBIV2qKdESKikqCYFjhwJBKN3iDhiqAiAel4dF91hlymXAJTKzsLsWz+iEorrv+U9vc4ufVwjJLw=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.13-test.1615391047592_1615391062703_0.5248953647303625"},"_hasShrinkwrap":false},"9.5.13":{"name":"ts-toolbelt","version":"9.5.13","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"277a6e2ac5ca8be2bbcd7593d987aaac3ea9bb75","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.5.13","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-zbU5tKowXAWmvFHuiNi517BXC6TlR0ly8AhdBU9ZMEZeOyNffyza+NZEDyrSDm5oIPs/JqZLHF9r3o1zb6ZwEQ==","shasum":"259b21bbbaf82661ea37a75b1ea0b5b427c89a97","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.5.13.tgz","fileCount":246,"unpackedSize":250578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSOnACRA9TVsSAnZWagAAxBIP/RjMqvJzLpslP2UlWdp3\npn6lNIG91GTU7LY6Lgdkp9oY+1QSzCBakDj6xP+RhQh246RwLL/Qz8OVK9Tf\nfT0vY/OcNOD2U2oLzQOIyOnf2lDfbcpC2Ri2s7wrr5PSmAAMzv3XEqZxQjyR\nxxYzOBXoRPVEXls0SDkiOYDlfgo5//pHj7P1yafV4jIW3zL05aFOU1X51G3R\n3jDPbAGTxkJa/Kn3CvL7Nu3brLVzRrTdA8bFFD9YRoK0ViiOUsU3LmBBsZ/c\nG3IjiQmj3wJ5gbHxSEQT3jJ1bm/i2FYgButIHpqa8lquPSGlK8+A5c5vdwwd\nh2n/kBpoTJA/G0q8OPxX1/eL3Y00eMYi7Mi+9r2axrVBL042DFjOoAzESz2O\nK4LY6Ip+JBzLD6+uBfL3ovFuu8dikRCO040fRNQuH0GOG+kHIUWHe1gWSq68\nXC0x8snicKzN3ofnKIQpfHI+G2kaTSWZ04IVKYEYZQA8xkHZ4nPfcN87TH75\nlqQ9z/tM6jQZ9J1FPC8jMc/mytjLkF0epVm+5lRKWJ3X7wh6QzaqR/37zatL\nLbjRFcC75kubhbb8RcO0mvqKlpUh5YIZo/jU5ylUNtnf7p3+ticGOW8IP7OA\nYhVaxMwHXWxALfWH3ibBaGurJe3tL+Wub6dY/SGbtD1K+BEr/moN5WcvAJUK\n0TR2\r\n=Oxpp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHgEniJiWrxTYhlDCQUoJJ2mZJRAtnHe+juxsoiIMhGjAiBee/hE78LCvup9T/pBYcMHSTrqUDKQapkkoG2E3BoamQ=="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.5.13_1615391167535_0.33196639707818876"},"_hasShrinkwrap":false},"9.6.0-test.1615391863903":{"name":"ts-toolbelt","version":"9.6.0-test.1615391863903","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"319e55123b9571d49f34eca3e5926e41ca73e0f3","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.6.0-test.1615391863903","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nOVfKwiqq4mcV9ySdrx/Op8rnRSMg3phhZDBLEC2Wi6aIDdgHna8xF60dJ/gqmhba8pTDwy8tP45zgukfecsWQ==","shasum":"1f3df4ae9e6823e2d96dc8303cdbabc48ad13389","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0-test.1615391863903.tgz","fileCount":246,"unpackedSize":247901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSOyHCRA9TVsSAnZWagAA8BgP/0LTZMDUHD+Q4mhCkbKl\ndHqaKleJ+kYtanD75oHuQcVnJTDVzOE58CTsX+LAqokw7ugRt3mwiax9NNOL\n/Smst3VdqQR/IzKmQm8zDd7D22Kg6lhQlx62ciPrh1t4QolwNtCPkFY//def\nGpvSZfrM6ovsaOuyPHr2CyS0OK+V/+i7IXF1bbVa4E0yW4pa0iOmP1k8MkSK\ntwYw2FcT9LOMOO2MCrrdInyEKQOBQMSq7KTCWle0dlXh8eH2s9qo6ACJjRNE\n6gARof3MSAYALg3RUkEG/GeByPHyoLXPfESsxTmzzbAzmwe8S5wiJrKHj+bz\n4Ji9P4G5OhkEmu7bdeqswjFAvh2Rq8GJuXRWXFpKz6U0W3N9uHlECaABo2tF\nId7yMGOSvlSf7vL5GHat8WTK0TYJf7GHTuEJgXqZRToRyuqKx39vurYi3Rew\nllQl13m4r5j3o6+7fG9yQlZPv7E8QWVV5bRXiSZQsUEnI3IqSlfNvqr/we6j\nrPdhP80jMdqAHp0/mrOxPXW5N4Q0VJcaINDIr/82IXWlXSw2InfnaFR5cbyB\noEN7lgLuwlXCLsZavDkRM1er3NrhyYimyq3kiIaxv99c+aj4/PIVwqbHzB1V\nvE0f2aL1wlzTqAZPMuO9nIFICgrZ1Gbd8wB+dsMFRwtYqozFposI3XeMpFgA\nFORf\r\n=Hfl8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcR/EGHzdcyXzPqP19Y+p/tCAFoqolN4tYUg95scAFUwIhAOf8OJglBMiRTtpFDcnlxlv3yz0I3XacDTT9i8pycH0h"}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.6.0-test.1615391863903_1615391878856_0.22266887147009595"},"_hasShrinkwrap":false},"9.6.0":{"name":"ts-toolbelt","version":"9.6.0","description":"TypeScript's largest utility library","keywords":["safe","tools","types","typesafe","typescript"],"homepage":"https://github.com/millsp/ts-toolbelt","repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"license":"Apache-2.0","author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"main":"out/index.js","types":"out/index.d.ts","scripts":{"build:clean":"bash scripts/build/clean.sh","build:code":"bash scripts/build/code.sh","build:docs":"bash scripts/build/docs.sh","build:types":"bash scripts/build/types.sh","ci:branch:ad":"bash scripts/ci/branch/ad.sh","ci:branch:bd":"bash scripts/ci/branch/bd.sh","ci:docs:ad":"bash scripts/ci/docs/ad.sh","ci:docs:bd":"bash scripts/ci/docs/bd.sh","ci:master:ad":"bash scripts/ci/master/ad.sh","ci:master:bd":"bash scripts/ci/master/bd.sh","ci:test:ad":"bash scripts/ci/test/ad.sh","ci:test:bd":"bash scripts/ci/test/bd.sh","release":"bash scripts/release.sh","test":"bash scripts/test/all.sh","test:code":"bash scripts/test/code.sh","test:lint":"bash scripts/test/lint.sh","test:types":"bash scripts/test/types.sh"},"dependencies":{},"devDependencies":{"@commitlint/cli":"^11.0.0","@commitlint/config-conventional":"^11.0.0","@typescript-eslint/parser":"^4.14.0","eledoc":"^0.2.0","eslint":"^7.18.0","eslint-plugin-fp":"^2.3.0","eslint-plugin-react":"^7.22.0","husky":"^4.3.0","npx":"^10.2.0","sort-package-json":"^1.48.0","standard-version":"^9.1.0","ts-node":"^9.1.0","tslib":"^2.1.0","typedoc":"^0.20.0","typescript":"latest"},"gitHead":"319e55123b9571d49f34eca3e5926e41ca73e0f3","bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"_id":"ts-toolbelt@9.6.0","_nodeVersion":"12.0.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==","shasum":"50a25426cfed500d4a09bd1b3afb6f28879edfd5","tarball":"https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz","fileCount":246,"unpackedSize":247882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSO0BCRA9TVsSAnZWagAAu70P/A3gUv+kspTGIvUNNNre\n11tN0j8QeYYWIwQXkXQ86u8YBxcyiwEC1LPo3f3BM28bPZh35a9TYzQ9hhuQ\nTs9MKpousY0xLYKEEWUZxuhAk4kdzHvp4hG14fGYC/SJcro3tk3Mn6DjTiKR\n7+vGuuk5hwEiAeptgENy4Gk63v7QRgAd1cdlePpWTGgVLRd7bKyri8yOAYkZ\nknN1BiQg9w6GRcPwN4I4MzglDPRO5cg8qVWZbUW8PiTbVJh+1hz9egxLvNEF\nabs23IDijMlwlYtJiUZpCmbm00AurrFsPuNAZfd9Rr1tszCvzwRMzffmf7nF\nWOQPiiEx9KFqZA2iXVJKhpGEP7ixo6ErA2Jgz/Cm3+8ISy7BAXuDNvNXVwGa\nAFnbpnfdmEDO9TBGT9uljiiFFiv0iQJTlDroOOF9yLqWWIAmYXxe21KaApNb\ns7pGJGxKYl6fHi3dmAYdFhuTWaU+uBcEuI9Y231vTxGxNUQu77Or+xontS90\nCwZ3o98m+KDieUJA7yBQKLxcHvRRLsmEmmo7soP8FuHJ/xoJHk2wGdbznl+F\nCBjKcK6xU78ohnIFmiFGUmQHIbuPHMYExYv/efJrUCNqkfG5NKzO/qQswbFQ\nO00qVwfiEnvZqChIn3BApZIZFLuxze3LNjQC9SwGQgvI8l9+3XqieUx6oSyE\nFokx\r\n=OW9O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjejSSKOmzQRb/MHVharaGflJpb2zVea85ntcQDX4L7gIgIj3TtJBfB79UaAr2Ctpl8+lvGhkJ1/tiFXyN8ShCUAs="}]},"_npmUser":{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},"directories":{},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-toolbelt_9.6.0_1615392001119_0.3845016664284353"},"_hasShrinkwrap":false}},"time":{"created":"2019-05-24T20:19:50.651Z","0.0.0":"2019-05-24T20:19:50.829Z","modified":"2023-12-04T19:37:25.725Z","0.0.1":"2019-06-08T23:28:52.352Z","0.0.2":"2019-06-08T23:39:30.162Z","0.0.3":"2019-06-08T23:40:55.394Z","0.0.4":"2019-06-08T23:41:25.084Z","0.0.5":"2019-06-08T23:45:04.190Z","0.0.6":"2019-06-09T00:31:48.201Z","0.0.7":"2019-06-09T00:42:57.603Z","0.0.9":"2019-06-09T01:11:10.985Z","0.0.10":"2019-06-09T01:18:24.504Z","0.0.12":"2019-06-09T01:52:00.537Z","0.0.13":"2019-06-09T02:09:22.656Z","0.0.14":"2019-06-09T02:10:48.668Z","0.0.15":"2019-06-09T12:05:55.743Z","0.0.16":"2019-06-09T16:42:18.491Z","1.0.0":"2019-06-17T21:46:34.187Z","1.0.1":"2019-06-17T21:55:41.482Z","1.0.2":"2019-06-17T22:14:35.347Z","1.0.3":"2019-06-17T22:52:36.181Z","1.0.4":"2019-06-17T22:57:19.517Z","1.0.5":"2019-06-17T23:09:03.636Z","1.0.6":"2019-06-17T23:12:33.723Z","1.0.8":"2019-06-17T23:49:01.184Z","1.0.9":"2019-06-18T00:39:59.557Z","1.0.10":"2019-06-18T00:48:14.738Z","1.0.11":"2019-06-18T00:52:04.117Z","1.0.12":"2019-06-18T00:57:30.136Z","1.0.13":"2019-06-18T01:10:44.578Z","1.0.14":"2019-06-18T12:59:52.854Z","1.0.15":"2019-06-18T13:03:05.776Z","1.0.16":"2019-06-18T13:07:03.027Z","1.0.17":"2019-06-18T13:10:55.481Z","1.0.18":"2019-06-18T13:13:57.223Z","1.0.19":"2019-06-18T13:23:21.270Z","1.0.20":"2019-06-18T13:32:32.468Z","1.0.21":"2019-06-18T13:36:03.786Z","1.0.22":"2019-06-18T13:51:18.773Z","1.0.23":"2019-06-18T13:52:44.810Z","1.0.24":"2019-06-18T13:54:44.033Z","1.0.25":"2019-06-18T14:06:40.975Z","1.0.26":"2019-06-18T14:10:11.938Z","1.0.27":"2019-06-18T14:29:10.861Z","1.0.28":"2019-06-18T14:43:55.442Z","1.0.29":"2019-06-18T15:16:19.514Z","1.0.30":"2019-06-18T17:22:44.403Z","1.0.31":"2019-06-18T18:48:25.101Z","1.0.32":"2019-06-18T23:24:15.674Z","1.0.33":"2019-06-18T23:37:04.918Z","1.0.34":"2019-06-19T00:26:05.593Z","1.0.35":"2019-06-19T00:36:39.979Z","1.0.36":"2019-06-19T00:39:08.730Z","1.0.37":"2019-06-19T12:31:03.110Z","1.0.38":"2019-06-19T12:44:39.466Z","1.0.39":"2019-06-19T12:55:40.855Z","1.0.40":"2019-06-19T13:03:03.445Z","1.0.41":"2019-06-19T13:21:34.116Z","1.0.42":"2019-06-19T13:24:05.654Z","1.0.43":"2019-06-19T13:31:49.083Z","1.0.44":"2019-06-19T14:16:57.694Z","1.0.45":"2019-06-19T14:24:59.662Z","1.0.46":"2019-06-19T14:33:36.204Z","1.0.47":"2019-06-19T16:14:01.963Z","1.0.48":"2019-06-19T16:26:23.855Z","1.0.49":"2019-06-19T16:43:40.006Z","1.0.52":"2019-06-19T16:59:52.009Z","1.0.53":"2019-06-20T10:46:37.962Z","1.0.54":"2019-06-20T10:56:19.838Z","1.0.55":"2019-06-20T10:57:29.983Z","1.1.0":"2019-06-20T11:00:37.230Z","1.1.1":"2019-06-20T11:53:28.528Z","1.1.2":"2019-06-20T11:58:09.044Z","1.1.3":"2019-06-20T12:02:00.095Z","1.1.4":"2019-06-20T12:16:55.104Z","1.1.5":"2019-06-20T22:07:43.146Z","1.1.6":"2019-06-20T22:18:37.459Z","1.1.7":"2019-06-21T13:55:50.800Z","1.1.8":"2019-06-21T13:59:16.381Z","1.1.9":"2019-06-21T14:17:00.250Z","1.1.10":"2019-06-21T14:23:13.452Z","1.1.11":"2019-06-21T14:24:40.305Z","1.1.12":"2019-06-21T23:29:47.653Z","1.1.13":"2019-06-22T12:33:51.372Z","1.1.14":"2019-06-23T14:41:08.404Z","2.0.0":"2019-06-25T21:08:45.861Z","2.0.1":"2019-06-25T22:45:36.887Z","2.0.2":"2019-06-25T23:31:20.763Z","2.0.3":"2019-06-25T23:33:55.707Z","2.0.4":"2019-06-25T23:37:32.492Z","2.0.5":"2019-06-26T00:08:48.494Z","2.0.6":"2019-06-26T00:14:18.666Z","2.0.7":"2019-06-26T00:17:28.605Z","2.0.8":"2019-06-26T01:28:11.572Z","2.0.9":"2019-06-26T01:31:44.746Z","2.0.10":"2019-06-26T01:42:45.179Z","2.0.11":"2019-06-26T20:19:38.191Z","2.0.12":"2019-06-26T21:01:29.165Z","2.0.13":"2019-06-26T21:38:56.515Z","2.0.14":"2019-06-26T22:19:03.704Z","2.0.15":"2019-06-27T08:32:39.325Z","2.0.16":"2019-06-27T09:11:19.141Z","2.0.17":"2019-06-27T16:40:58.857Z","2.1.0":"2019-06-27T21:51:20.800Z","2.1.1":"2019-06-27T23:30:03.416Z","2.1.2":"2019-06-28T11:24:05.181Z","2.1.3":"2019-06-28T18:16:45.930Z","2.1.4":"2019-06-29T18:55:09.441Z","2.1.5":"2019-06-29T19:41:58.493Z","3.0.0-0":"2019-07-01T00:45:21.235Z","3.0.0-1":"2019-07-01T01:14:45.142Z","3.0.0-2":"2019-07-01T17:44:46.027Z","3.0.0-3":"2019-07-02T13:10:42.900Z","3.0.0-4":"2019-07-02T13:20:46.577Z","3.0.0-5":"2019-07-07T22:51:52.593Z","3.0.0-6":"2019-07-07T23:11:17.927Z","3.0.0-7":"2019-07-08T21:17:27.606Z","3.0.0-8":"2019-07-08T21:56:35.715Z","3.0.0-9":"2019-07-08T23:04:58.028Z","3.0.0-10":"2019-07-16T18:25:36.556Z","3.0.0-11":"2019-07-16T19:37:07.621Z","3.0.0-12":"2019-07-23T16:02:36.006Z","3.0.0":"2019-07-25T00:32:20.511Z","3.0.2":"2019-07-25T00:38:37.903Z","3.0.4":"2019-07-25T10:40:34.593Z","3.0.5":"2019-07-25T10:45:49.504Z","3.1.0":"2019-07-25T12:21:45.577Z","3.1.1":"2019-07-25T13:18:23.109Z","3.1.2":"2019-07-30T20:56:23.004Z","3.1.3":"2019-07-31T16:16:47.045Z","3.2.4":"2019-08-01T12:35:57.965Z","3.2.5":"2019-08-01T12:41:55.083Z","3.2.6":"2019-08-01T13:01:01.549Z","3.2.7":"2019-08-01T13:51:20.664Z","3.2.8":"2019-08-01T14:10:12.922Z","3.2.9":"2019-08-01T14:36:19.622Z","3.2.10":"2019-08-01T14:40:37.720Z","3.2.11":"2019-08-01T14:45:21.837Z","3.2.12":"2019-08-01T14:47:17.771Z","3.2.13":"2019-08-02T14:54:28.656Z","3.2.14":"2019-08-02T15:28:23.120Z","3.2.15":"2019-08-05T14:27:00.485Z","3.2.16":"2019-08-05T15:02:25.206Z","3.2.17":"2019-08-05T15:13:05.878Z","3.2.18":"2019-08-05T16:31:44.472Z","3.2.19":"2019-08-05T21:39:21.159Z","3.2.20":"2019-08-05T21:48:13.705Z","3.2.21":"2019-08-05T21:51:20.541Z","3.2.22":"2019-08-05T22:06:22.185Z","3.2.23":"2019-08-06T19:42:11.995Z","3.2.24":"2019-08-07T20:21:31.043Z","3.4.1":"2019-08-08T21:13:55.731Z","3.5.0":"2019-08-08T23:39:51.913Z","3.5.1":"2019-08-09T12:39:28.526Z","3.6.0":"2019-08-10T14:08:47.059Z","3.6.1":"2019-08-10T14:23:03.989Z","3.7.0":"2019-08-12T20:07:14.776Z","3.7.1":"2019-08-12T20:53:20.085Z","3.8.0":"2019-08-16T12:07:46.557Z","3.8.1":"2019-08-19T16:27:09.100Z","3.8.2":"2019-08-20T14:22:35.624Z","3.8.3":"2019-08-20T17:31:16.488Z","3.8.4":"2019-08-22T20:15:37.257Z","3.8.5":"2019-08-23T14:19:58.520Z","3.8.9":"2019-08-23T14:44:52.381Z","3.8.10":"2019-08-23T14:54:16.457Z","3.8.11":"2019-08-23T15:11:16.995Z","3.8.12":"2019-08-23T15:14:24.949Z","3.8.16":"2019-08-23T15:34:40.691Z","3.8.18":"2019-08-23T16:37:49.851Z","3.8.19":"2019-08-23T16:47:02.655Z","3.8.22":"2019-08-23T17:34:00.041Z","3.8.23":"2019-08-23T17:39:18.868Z","3.8.24":"2019-08-23T17:46:57.481Z","3.8.31":"2019-08-23T21:17:44.572Z","3.8.32":"2019-08-23T21:34:12.669Z","3.8.34":"2019-08-23T21:58:02.128Z","3.8.35":"2019-08-23T22:50:46.015Z","3.8.36":"2019-08-23T22:57:03.489Z","3.8.41":"2019-08-23T23:02:52.944Z","3.8.42":"2019-08-23T23:11:53.026Z","3.8.48":"2019-08-24T17:42:43.278Z","3.8.49":"2019-08-24T17:47:29.946Z","3.8.51-test":"2019-08-26T22:10:17.859Z","3.8.51":"2019-08-26T22:13:57.926Z","3.8.52-test":"2019-08-27T11:30:59.740Z","3.8.52":"2019-08-27T11:34:34.078Z","3.8.53-test":"2019-08-27T18:55:43.880Z","3.8.53":"2019-08-27T18:59:24.254Z","3.8.54-test":"2019-08-27T19:40:16.089Z","3.8.54":"2019-08-27T19:43:56.875Z","3.8.55":"2019-08-27T20:00:15.591Z","3.8.56-test":"2019-08-27T20:12:13.119Z","3.8.56":"2019-08-27T20:16:36.665Z","3.8.57-test":"2019-08-27T20:33:56.205Z","3.8.57":"2019-08-27T20:37:44.725Z","3.8.58-test":"2019-08-27T20:47:48.204Z","3.8.58":"2019-08-27T20:51:25.344Z","3.8.59":"2019-08-27T21:01:55.548Z","3.8.60-test":"2019-08-28T09:39:32.189Z","3.8.60":"2019-08-28T09:43:28.260Z","3.8.61-test":"2019-08-28T10:27:36.139Z","3.8.61":"2019-08-28T10:31:32.493Z","3.8.62-test":"2019-08-28T15:43:37.778Z","3.8.62":"2019-08-28T15:47:26.656Z","3.8.63-test":"2019-08-28T19:40:20.586Z","3.8.63":"2019-08-28T19:44:12.019Z","3.8.64-test":"2019-09-06T14:20:47.275Z","3.8.64":"2019-09-06T14:25:07.279Z","3.8.65-test.1567780648003":"2019-09-06T14:37:37.353Z","3.8.65-test.1567780659494":"2019-09-06T14:37:48.155Z","3.8.65":"2019-09-06T14:41:36.316Z","3.8.1567781323189":"2019-09-06T14:48:51.645Z","3.8.1567781341064":"2019-09-06T14:49:10.158Z","3.8.66":"2019-09-06T14:53:05.840Z","3.8.1567784109419":"2019-09-06T15:35:17.934Z","3.8.68":"2019-09-06T15:38:56.849Z","3.8.1567788371950":"2019-09-06T16:46:21.106Z","3.8.1567788381997":"2019-09-06T16:46:31.060Z","3.8.1567788399964":"2019-09-06T16:46:47.873Z","3.8.69":"2019-09-06T16:50:20.896Z","3.8.1567788972460":"2019-09-06T16:56:20.985Z","3.8.1567788970295":"2019-09-06T16:56:37.450Z","3.8.70":"2019-09-06T17:00:40.704Z","3.8.71":"2019-09-07T10:39:24.672Z","3.8.72-test.1567853852124":"2019-09-07T10:57:40.514Z","3.8.72-test.1567853853904":"2019-09-07T10:57:55.844Z","3.8.72":"2019-09-07T11:01:22.592Z","3.8.73-test.1568045663285":"2019-09-09T16:14:31.888Z","3.8.73-test.1568045684293":"2019-09-09T16:14:52.352Z","3.8.73":"2019-09-09T16:18:33.658Z","3.8.74-test.1568048748250":"2019-09-09T17:05:56.408Z","3.8.74-test.1568048762318":"2019-09-09T17:06:10.620Z","3.8.74":"2019-09-09T17:10:13.830Z","3.8.75-test.1568049720361":"2019-09-09T17:22:08.254Z","3.8.75-test.1568049711861":"2019-09-09T17:22:13.068Z","3.8.75":"2019-09-09T17:26:10.521Z","3.8.76-test.1568050646884":"2019-09-09T17:37:35.733Z","3.8.76-test.1568050652028":"2019-09-09T17:37:41.772Z","3.8.76":"2019-09-09T17:41:37.778Z","3.8.77-test.1568118238285":"2019-09-10T12:24:06.460Z","3.8.77":"2019-09-10T12:27:56.585Z","3.8.78-test.1568119632249":"2019-09-10T12:47:22.201Z","3.8.78":"2019-09-10T12:51:36.862Z","3.8.79-test.1568122055031":"2019-09-10T13:27:43.354Z","3.8.79":"2019-09-10T13:32:00.223Z","3.8.80-test.1568122591989":"2019-09-10T13:36:40.737Z","3.8.81-test.1568123200403":"2019-09-10T13:46:49.188Z","3.8.81":"2019-09-10T13:50:44.008Z","3.8.84-test.1568142262855":"2019-09-10T19:04:32.276Z","3.8.85-test.1568142943247":"2019-09-10T19:15:51.425Z","3.8.85":"2019-09-10T19:19:50.829Z","3.8.86-test.1568143688591":"2019-09-10T19:28:17.195Z","3.8.86":"2019-09-10T19:32:50.650Z","3.8.87-test.1568147645999":"2019-09-10T20:34:14.262Z","3.8.87":"2019-09-10T20:38:31.277Z","3.8.88-test.1568148489787":"2019-09-10T20:48:18.681Z","3.8.88":"2019-09-10T20:52:17.660Z","3.8.89-test.1568150186062":"2019-09-10T21:16:34.464Z","3.8.89":"2019-09-10T21:20:43.955Z","3.8.90-test.1568151186295":"2019-09-10T21:33:15.503Z","3.8.90":"2019-09-10T21:37:34.574Z","3.8.91-test.1568156719916":"2019-09-10T23:05:28.797Z","3.8.91":"2019-09-10T23:09:26.154Z","3.8.91-test.1568293079340":"2019-09-12T12:58:10.167Z","3.8.92-test.1568297379526":"2019-09-12T14:09:48.410Z","3.8.92":"2019-09-12T14:13:46.124Z","3.8.92-test.1568305714629":"2019-09-12T16:28:44.305Z","3.8.95-test.1568390842261":"2019-09-13T16:07:44.510Z","3.8.95":"2019-09-13T16:11:40.005Z","3.9.0-test.1568483302539":"2019-09-14T17:48:31.922Z","3.9.1-test.1568483409617":"2019-09-14T17:50:18.458Z","3.9.0":"2019-09-14T17:52:46.965Z","3.9.1":"2019-09-14T17:54:31.419Z","3.9.2-test.1568484003119":"2019-09-14T18:00:11.492Z","3.9.2":"2019-09-14T18:03:58.499Z","3.10.0-test.1568491851318":"2019-09-14T20:10:59.741Z","3.10.0":"2019-09-14T20:14:45.165Z","3.11.0-test.1568654864716":"2019-09-16T17:27:53.163Z","3.11.0":"2019-09-16T17:31:53.994Z","3.12.0-test.1568713151449":"2019-09-17T09:39:19.431Z","3.12.0":"2019-09-17T09:43:15.750Z","3.13.0-test.1568746194544":"2019-09-17T18:50:03.277Z","3.13.0":"2019-09-17T18:55:53.783Z","3.14.0-test.1568753704363":"2019-09-17T20:55:13.474Z","3.14.0":"2019-09-17T20:59:15.577Z","4.0.0-test.1568904616581":"2019-09-19T14:50:25.896Z","4.0.1-test.1568907418293":"2019-09-19T15:37:07.053Z","4.0.1":"2019-09-19T15:41:04.528Z","4.0.2-test.1568913469521":"2019-09-19T17:17:57.828Z","4.0.2":"2019-09-19T17:21:57.522Z","4.0.3-test.1568914076863":"2019-09-19T17:28:05.372Z","4.0.3":"2019-09-19T17:32:06.153Z","4.0.4-test.1568914679841":"2019-09-19T17:38:10.113Z","4.0.4":"2019-09-19T17:42:25.763Z","4.0.5-test.1568916807035":"2019-09-19T18:13:34.978Z","4.0.5":"2019-09-19T18:17:34.524Z","4.0.5-test.1568917827577":"2019-09-19T18:30:35.976Z","4.0.8-test.1568920263704":"2019-09-19T19:11:11.546Z","4.0.8":"2019-09-19T19:15:28.322Z","4.0.9-test.1568921175804":"2019-09-19T19:26:25.219Z","4.0.9":"2019-09-19T19:34:50.442Z","4.0.9-test.1568922479244":"2019-09-19T19:48:08.918Z","4.0.10-test.1568995953012":"2019-09-20T16:12:46.397Z","4.0.10":"2019-09-20T16:16:46.779Z","4.0.10-test.1569231375839":"2019-09-23T09:36:26.028Z","4.0.11-test.1569272853032":"2019-09-23T21:07:41.670Z","4.0.11":"2019-09-23T21:11:54.113Z","4.0.12-test.1569282786950":"2019-09-23T23:53:15.489Z","4.0.12":"2019-09-23T23:57:26.589Z","4.1.0-test.1569335163881":"2019-09-24T14:26:12.685Z","4.1.0":"2019-09-24T14:30:33.636Z","4.1.1-test.1569353626341":"2019-09-24T19:33:55.041Z","4.1.1":"2019-09-24T19:38:08.910Z","4.2.0-test.1569354669966":"2019-09-24T19:51:18.375Z","4.2.0":"2019-09-24T19:55:28.496Z","4.2.1-test.1569355750746":"2019-09-24T20:09:23.040Z","4.2.1":"2019-09-24T20:13:57.536Z","4.3.0-test.1569357763065":"2019-09-24T20:42:51.738Z","4.3.0-test.1569357793470":"2019-09-24T20:43:22.937Z","4.3.0":"2019-09-24T20:47:36.997Z","4.4.0-test.1569406254380":"2019-09-25T10:11:03.395Z","4.4.0":"2019-09-25T10:15:07.757Z","4.4.1-test.1569406891765":"2019-09-25T10:21:40.836Z","4.4.1":"2019-09-25T10:25:52.379Z","4.4.1-test.1569415069989":"2019-09-25T12:37:58.271Z","4.4.2-test.1569415722769":"2019-09-25T12:48:51.195Z","4.4.2-test.1569415838682":"2019-09-25T12:50:47.957Z","4.4.2":"2019-09-25T12:53:17.572Z","4.4.2-test.1569417383804":"2019-09-25T13:16:32.254Z","4.4.2-test.1569418397438":"2019-09-25T13:33:26.647Z","4.4.2-test.1569418954779":"2019-09-25T13:42:42.668Z","4.4.3-test.1569419434673":"2019-09-25T13:50:42.415Z","4.4.3":"2019-09-25T13:54:55.141Z","4.4.4-test.1569451452221":"2019-09-25T22:44:21.103Z","4.4.5-test.1569451588754":"2019-09-25T22:46:37.018Z","4.4.4":"2019-09-25T22:48:30.165Z","4.4.5":"2019-09-25T22:51:12.664Z","4.4.6-test.1569452409424":"2019-09-25T23:00:31.930Z","4.4.7-test.1569452464245":"2019-09-25T23:01:13.173Z","4.4.7":"2019-09-25T23:05:28.610Z","4.5.0-test.1569497279478":"2019-09-26T11:28:08.263Z","4.5.1-test.1569498757518":"2019-09-26T11:52:46.479Z","4.5.1":"2019-09-26T11:57:01.346Z","4.5.2-test.1569501099762":"2019-09-26T12:31:48.409Z","4.5.2":"2019-09-26T12:36:16.319Z","4.5.2-test.1569586627260":"2019-09-27T12:17:16.544Z","4.5.3-test.1569587864220":"2019-09-27T12:37:52.745Z","4.5.3-test.1569593176677":"2019-09-27T14:06:24.974Z","4.5.3-test.1569593598109":"2019-09-27T14:13:26.603Z","4.5.3-test.1569603336602":"2019-09-27T16:55:45.632Z","4.5.3-test.1569606782263":"2019-09-27T17:53:25.009Z","4.5.4-test.1569611276762":"2019-09-27T19:08:05.224Z","4.5.4":"2019-09-27T19:12:04.838Z","4.6.0-test.1569612516542":"2019-09-27T19:28:45.423Z","4.6.0":"2019-09-27T19:35:48.347Z","4.7.0-test.1569614446522":"2019-09-27T20:01:08.528Z","4.7.0":"2019-09-27T20:05:16.238Z","4.7.1-test.1569616930845":"2019-09-27T20:42:19.730Z","4.7.1":"2019-09-27T20:46:21.137Z","4.7.2-test.1569630739737":"2019-09-28T00:32:29.635Z","4.7.2":"2019-09-28T00:36:30.350Z","4.7.3-test.1569632889663":"2019-09-28T01:08:18.350Z","4.7.3":"2019-09-28T01:12:17.521Z","4.7.4-test.1569674267602":"2019-09-28T12:38:10.470Z","4.7.5-test.1569674884964":"2019-09-28T12:48:13.820Z","4.7.6-test.1569675048187":"2019-09-28T12:50:57.092Z","4.7.7-test.1569677238038":"2019-09-28T13:27:26.086Z","4.7.7":"2019-09-28T13:31:33.462Z","4.7.8-test.1569679083686":"2019-09-28T13:58:11.700Z","4.7.8":"2019-09-28T14:02:15.567Z","4.7.9-test.1569680282222":"2019-09-28T14:18:10.995Z","4.7.9":"2019-09-28T14:22:19.225Z","4.7.10-test.1569682307583":"2019-09-28T14:51:56.688Z","4.7.11-test.1569682499978":"2019-09-28T14:55:08.746Z","4.7.12-test.1569682551884":"2019-09-28T14:56:00.481Z","4.7.10":"2019-09-28T14:56:16.141Z","4.7.11":"2019-09-28T14:59:22.806Z","4.7.12":"2019-09-28T14:59:54.183Z","4.7.13-test.1569690049531":"2019-09-28T17:00:58.239Z","4.7.14-test.1569690275538":"2019-09-28T17:04:44.546Z","4.7.13":"2019-09-28T17:05:10.484Z","4.7.15-test.1569690460666":"2019-09-28T17:07:49.538Z","4.7.14":"2019-09-28T17:08:36.668Z","4.7.15":"2019-09-28T17:12:07.530Z","4.7.16-test.1569690981914":"2019-09-28T17:16:30.330Z","4.7.16":"2019-09-28T17:20:31.899Z","4.7.16-test.1569849883863":"2019-09-30T13:24:52.269Z","4.7.17-test.1569850359798":"2019-09-30T13:32:49.393Z","4.7.17":"2019-09-30T13:37:15.785Z","4.7.18-test.1569851040676":"2019-09-30T13:44:10.763Z","4.7.18":"2019-09-30T13:48:17.051Z","4.7.19-test.1569871108887":"2019-09-30T19:18:37.320Z","4.7.19":"2019-09-30T19:23:03.480Z","4.7.22-test.1569935284505":"2019-10-01T13:08:12.994Z","4.7.22":"2019-10-01T13:12:30.170Z","4.7.23-test.1569937070801":"2019-10-01T13:37:59.246Z","4.7.23":"2019-10-01T13:42:04.001Z","4.7.24-test.1569960373309":"2019-10-01T20:06:21.834Z","4.7.24":"2019-10-01T20:10:34.376Z","4.7.25-test.1570208606601":"2019-10-04T17:03:35.126Z","4.8.0-test.1570211228917":"2019-10-04T17:47:17.378Z","4.8.0-test.1570212111518":"2019-10-04T18:02:00.313Z","4.8.1-test.1570272979715":"2019-10-05T10:56:28.934Z","4.8.1":"2019-10-05T11:00:30.559Z","4.8.2-test.1570274259247":"2019-10-05T11:17:48.137Z","4.8.2":"2019-10-05T11:21:50.706Z","4.8.3-test.1570275932553":"2019-10-05T11:45:41.997Z","4.8.3":"2019-10-05T11:49:48.924Z","4.8.4-test.1570299788466":"2019-10-05T18:23:17.515Z","4.8.4":"2019-10-05T18:27:14.502Z","4.8.5-test.1570494874113":"2019-10-08T00:34:45.073Z","4.8.5":"2019-10-08T00:38:37.401Z","4.8.6-test.1570495714349":"2019-10-08T00:48:43.133Z","4.8.6":"2019-10-08T00:53:19.517Z","4.8.7-test.1570527819452":"2019-10-08T09:43:47.898Z","4.8.8-test.1570528007615":"2019-10-08T09:46:57.047Z","4.8.7":"2019-10-08T09:47:56.232Z","4.8.8":"2019-10-08T09:51:05.878Z","4.8.8-test.1570645374000":"2019-10-09T18:23:02.604Z","4.8.10-test.1570881991158":"2019-10-12T12:06:39.971Z","4.8.10":"2019-10-12T12:10:34.377Z","4.8.11-test.1570889658689":"2019-10-12T14:14:27.207Z","4.8.11":"2019-10-12T14:18:37.623Z","4.8.12-test.1570909444413":"2019-10-12T19:44:12.968Z","4.8.12":"2019-10-12T19:48:21.594Z","4.8.13-test.1570909856211":"2019-10-12T19:51:04.784Z","4.8.13":"2019-10-12T19:54:53.560Z","4.8.14-test.1571167118031":"2019-10-15T19:18:47.081Z","4.8.14":"2019-10-15T19:22:52.379Z","4.8.15-test.1571168717816":"2019-10-15T19:45:26.323Z","4.8.15":"2019-10-15T19:49:39.719Z","4.8.16-test.1571171883145":"2019-10-15T20:38:11.606Z","4.8.16":"2019-10-15T20:42:09.467Z","4.8.17-test.1571315054089":"2019-10-17T12:24:23.224Z","4.8.17":"2019-10-17T12:28:11.389Z","4.8.17-test.1571328589545":"2019-10-17T16:10:00.229Z","4.8.19-test.1571389956421":"2019-10-18T09:12:44.779Z","4.8.19":"2019-10-18T09:16:50.160Z","4.8.19-test.1571484323594":"2019-10-19T11:25:31.962Z","4.8.20-test.1571484724721":"2019-10-19T11:32:13.568Z","4.8.20":"2019-10-19T11:35:54.950Z","4.8.21-test.1571570305681":"2019-10-20T11:18:35.080Z","4.8.21":"2019-10-20T11:22:32.629Z","4.8.22-test.1571658793860":"2019-10-21T11:53:23.206Z","4.8.22":"2019-10-21T11:57:24.666Z","4.8.23-test.1571937767384":"2019-10-24T17:22:55.928Z","4.8.23":"2019-10-24T17:27:39.942Z","4.8.24-test.1571959820954":"2019-10-24T23:30:29.872Z","4.8.24":"2019-10-24T23:34:27.243Z","4.8.27-test.1572089591205":"2019-10-26T11:33:20.676Z","4.8.27":"2019-10-26T11:37:19.317Z","4.8.28-test.1572090394132":"2019-10-26T11:46:43.957Z","4.8.28":"2019-10-26T11:50:43.512Z","4.8.29-test.1572092011385":"2019-10-26T12:13:40.438Z","4.8.29":"2019-10-26T12:17:38.178Z","4.9.0-test.1572112986555":"2019-10-26T18:03:15.108Z","4.9.0":"2019-10-26T18:07:30.249Z","4.9.1-test.1572113370569":"2019-10-26T18:09:40.332Z","4.9.1":"2019-10-26T18:13:49.005Z","4.9.2-test.1572175447561":"2019-10-27T11:24:16.149Z","4.9.3-test.1572197436263":"2019-10-27T17:30:44.555Z","4.9.3":"2019-10-27T17:34:40.748Z","4.9.3-test.1572197942207":"2019-10-27T17:39:11.913Z","4.9.4-test.1572198210185":"2019-10-27T17:43:39.615Z","4.9.4":"2019-10-27T17:47:36.940Z","4.9.5-test.1572199212121":"2019-10-27T18:00:20.480Z","4.9.5":"2019-10-27T18:04:17.700Z","4.9.6-test.1572199612980":"2019-10-27T18:07:03.672Z","4.9.6":"2019-10-27T18:11:23.226Z","4.9.9-test.1572201789137":"2019-10-27T18:43:16.938Z","4.9.9":"2019-10-27T18:47:23.531Z","4.9.10-test.1572290522801":"2019-10-28T19:22:11.740Z","4.9.10":"2019-10-28T19:26:38.283Z","4.9.11-test.1572301514431":"2019-10-28T22:25:23.151Z","4.9.11":"2019-10-28T22:29:17.252Z","4.9.12-test.1572301805695":"2019-10-28T22:30:14.626Z","4.9.12":"2019-10-28T22:34:16.113Z","4.9.13-test.1572302708710":"2019-10-28T22:45:17.511Z","4.9.13":"2019-10-28T22:49:20.608Z","4.9.14-test.1572347487415":"2019-10-29T11:11:36.586Z","4.9.14":"2019-10-29T11:15:27.246Z","4.9.15-test.1572533396101":"2019-10-31T14:50:04.963Z","4.9.15":"2019-10-31T14:54:07.793Z","4.9.16-test.1572536896605":"2019-10-31T15:48:25.749Z","4.9.16":"2019-10-31T15:52:29.011Z","4.9.17-test.1572539573454":"2019-10-31T16:33:02.530Z","4.9.18-test.1572539768153":"2019-10-31T16:36:17.307Z","4.9.17":"2019-10-31T16:36:48.783Z","4.9.18":"2019-10-31T16:40:12.240Z","4.9.19-test.1572540030599":"2019-10-31T16:40:39.747Z","4.9.20-test.1572540162146":"2019-10-31T16:42:50.236Z","4.9.19":"2019-10-31T16:44:36.711Z","4.9.20":"2019-10-31T16:46:45.043Z","4.9.21-test.1572546384704":"2019-10-31T18:26:33.542Z","4.9.22-test.1572551476697":"2019-10-31T19:51:26.113Z","4.9.23-test.1572553482262":"2019-10-31T20:24:51.616Z","4.9.23":"2019-10-31T20:29:14.084Z","4.9.24-test.1572555106016":"2019-10-31T20:51:55.024Z","4.9.25-test.1572555190742":"2019-10-31T20:53:19.384Z","4.9.24":"2019-10-31T20:55:57.279Z","4.9.25":"2019-10-31T20:57:14.944Z","4.9.26-test.1572556041485":"2019-10-31T21:07:30.577Z","4.9.27-test.1572556252966":"2019-10-31T21:11:01.268Z","4.9.26":"2019-10-31T21:11:27.931Z","4.9.27":"2019-10-31T21:15:08.879Z","4.9.28-test.1572604989247":"2019-11-01T10:43:18.139Z","4.9.29-test.1572605400406":"2019-11-01T10:50:09.178Z","4.9.29":"2019-11-01T10:54:07.940Z","4.9.30-test.1572644773597":"2019-11-01T21:46:22.409Z","4.9.30":"2019-11-01T21:50:23.464Z","4.9.31-test.1572691023015":"2019-11-02T10:37:12.498Z","4.9.31":"2019-11-02T10:41:09.589Z","4.9.32-test.1572716077837":"2019-11-02T17:34:46.744Z","4.9.32":"2019-11-02T17:38:31.842Z","4.10.0-test.1573072618212":"2019-11-06T20:37:07.028Z","4.10.0":"2019-11-06T20:41:00.692Z","4.10.1-test.1573312232151":"2019-11-09T15:10:41.123Z","4.10.1":"2019-11-09T15:14:12.709Z","4.10.2-test.1573313867335":"2019-11-09T15:37:56.382Z","4.10.2":"2019-11-09T15:41:33.302Z","4.10.3-test.1573339912213":"2019-11-09T22:52:01.074Z","4.10.3":"2019-11-09T22:55:34.871Z","4.10.4-test.1573420513997":"2019-11-10T21:15:23.810Z","4.10.4":"2019-11-10T21:18:59.935Z","4.10.5-test.1573422577662":"2019-11-10T21:49:46.288Z","4.10.6-test.1573422767793":"2019-11-10T21:52:56.688Z","4.10.5":"2019-11-10T21:53:18.103Z","4.10.6":"2019-11-10T21:56:30.912Z","4.10.7-test.1573423020449":"2019-11-10T21:57:08.522Z","4.10.7":"2019-11-10T22:00:37.870Z","4.10.8-test.1573764354198":"2019-11-14T20:46:03.032Z","4.10.8":"2019-11-14T20:49:40.976Z","4.10.9-test.1574017152370":"2019-11-17T18:59:22.218Z","4.10.10-test.1574017299796":"2019-11-17T19:01:48.910Z","4.10.10-test.1574018470935":"2019-11-17T19:21:19.278Z","4.10.11-test.1574025244015":"2019-11-17T21:14:13.054Z","4.10.12-test.1574027043756":"2019-11-17T21:44:18.421Z","4.10.12":"2019-11-17T21:47:53.480Z","4.10.13-test.1574082161307":"2019-11-18T13:02:56.917Z","4.10.13":"2019-11-18T13:06:29.622Z","4.10.14-test.1574278814205":"2019-11-20T19:40:30.657Z","4.10.14":"2019-11-20T19:44:15.635Z","4.10.15-test.1574283974210":"2019-11-20T21:06:37.991Z","4.10.15":"2019-11-20T21:10:35.725Z","4.10.16-test.1574285575441":"2019-11-20T21:33:11.210Z","4.10.16":"2019-11-20T21:36:50.340Z","4.10.17-test.1574286287061":"2019-11-20T21:45:03.695Z","4.10.18-test.1574286480959":"2019-11-20T21:48:17.959Z","4.10.17":"2019-11-20T21:48:44.895Z","4.10.18":"2019-11-20T21:52:17.595Z","4.10.19-test.1574287826007":"2019-11-20T22:10:41.777Z","4.10.19":"2019-11-20T22:14:27.289Z","4.10.20-test.1574289135740":"2019-11-20T22:32:30.617Z","4.10.20":"2019-11-20T22:36:00.884Z","4.10.20-test.1574372373827":"2019-11-21T21:39:48.963Z","4.10.21-test.1574373131066":"2019-11-21T21:52:26.690Z","4.10.21":"2019-11-21T21:56:06.824Z","5.0.0-test.1574422268285":"2019-11-22T11:31:52.989Z","5.0.1-test.1574422334055":"2019-11-22T11:32:57.420Z","5.0.2-test.1574595380311":"2019-11-24T11:36:53.740Z","4.11.0-test.1575065646270":"2019-11-29T22:14:22.311Z","4.11.0":"2019-11-29T22:17:53.585Z","4.12.0-test.1575069114775":"2019-11-29T23:12:09.840Z","4.12.0":"2019-11-29T23:15:34.811Z","4.12.1-test.1575108600748":"2019-11-30T10:10:16.121Z","4.12.1":"2019-11-30T10:13:40.438Z","4.12.1-test.1575110560592":"2019-11-30T10:42:56.686Z","4.12.2-test.1575119490554":"2019-11-30T13:11:45.888Z","4.12.2":"2019-11-30T13:15:16.123Z","4.12.3-test.1575131413526":"2019-11-30T16:30:28.684Z","4.12.3":"2019-11-30T16:33:54.643Z","4.12.4-test.1575132340399":"2019-11-30T16:45:55.380Z","4.12.4":"2019-11-30T16:49:21.264Z","4.12.5-test.1575142606731":"2019-11-30T19:37:03.416Z","4.12.5":"2019-11-30T19:40:56.662Z","4.12.6-test.1575230905047":"2019-12-01T20:08:40.186Z","4.12.6":"2019-12-01T20:12:05.968Z","4.12.7-test.1575237950619":"2019-12-01T22:06:06.982Z","4.12.7":"2019-12-01T22:09:38.291Z","4.12.8-test.1575286444292":"2019-12-02T11:34:20.377Z","4.12.8":"2019-12-02T11:37:46.874Z","4.12.9-test.1575300542013":"2019-12-02T15:29:16.613Z","4.12.10-test.1575300954385":"2019-12-02T15:36:09.265Z","4.12.10":"2019-12-02T15:39:41.519Z","4.12.11-test.1575302701772":"2019-12-02T16:05:15.218Z","4.12.11":"2019-12-02T16:08:24.058Z","4.12.12-test.1575369881276":"2019-12-03T10:44:57.555Z","4.12.12":"2019-12-03T10:48:13.998Z","4.12.13":"2019-12-03T17:15:45.662Z","4.13.0-test.1576073602812":"2019-12-11T14:13:38.976Z","4.13.0":"2019-12-11T14:17:22.351Z","4.13.1-test.1576089236439":"2019-12-11T18:34:12.385Z","4.13.1":"2019-12-11T18:37:36.122Z","4.13.2-test.1576089862967":"2019-12-11T18:44:36.735Z","4.13.2":"2019-12-11T18:47:49.613Z","4.13.3-test.1576093995645":"2019-12-11T19:53:28.650Z","4.13.3":"2019-12-11T19:56:47.607Z","4.13.4-test.1576095338506":"2019-12-11T20:15:54.173Z","4.13.4":"2019-12-11T20:19:08.686Z","4.13.5-test.1576103901528":"2019-12-11T22:38:37.302Z","4.13.5":"2019-12-11T22:42:02.150Z","4.13.6-test.1576527530033":"2019-12-16T20:19:03.866Z","4.13.6":"2019-12-16T20:21:57.143Z","4.14.0-test.1576592501680":"2019-12-17T14:21:55.391Z","4.14.0":"2019-12-17T14:24:55.947Z","4.14.1-test.1576606763178":"2019-12-17T18:19:36.045Z","4.14.1":"2019-12-17T18:22:41.262Z","4.14.2-test.1576606974913":"2019-12-17T18:23:23.332Z","4.14.2":"2019-12-17T18:26:21.108Z","4.14.3-test.1576611456785":"2019-12-17T19:37:50.036Z","4.14.3":"2019-12-17T19:40:43.106Z","4.14.4-test.1576702871035":"2019-12-18T21:01:24.529Z","4.14.4":"2019-12-18T21:04:23.325Z","4.14.5-test.1576712898929":"2019-12-18T23:48:31.870Z","4.14.5":"2019-12-18T23:51:27.722Z","4.14.6-test.1576789994209":"2019-12-19T21:13:27.383Z","4.14.6":"2019-12-19T21:16:24.254Z","6.0.1-test.1577029376745":"2019-12-22T15:43:09.460Z","6.0.1":"2019-12-22T15:46:06.338Z","6.0.2-test.1577579892641":"2019-12-29T00:38:24.991Z","6.0.2":"2019-12-29T00:41:17.183Z","6.0.3-test.1577581412587":"2019-12-29T01:03:45.686Z","6.0.3":"2019-12-29T01:06:47.404Z","6.0.4-test.1577660016274":"2019-12-29T22:53:49.197Z","6.0.4":"2019-12-29T22:56:45.617Z","6.0.7-test.1577718149527":"2019-12-30T15:02:42.561Z","6.0.7":"2019-12-30T15:05:36.562Z","6.1.0-test.1577725119213":"2019-12-30T16:58:52.725Z","6.1.0":"2019-12-30T17:01:50.201Z","6.1.1-test.1577725832381":"2019-12-30T17:10:46.175Z","6.1.1":"2019-12-30T17:13:45.698Z","6.1.2-test.1577730726944":"2019-12-30T18:32:19.819Z","6.1.2":"2019-12-30T18:35:16.902Z","6.1.3-test.1577747671643":"2019-12-30T23:14:45.173Z","6.1.3":"2019-12-30T23:17:45.759Z","6.1.4-test.1577789091485":"2019-12-31T10:45:05.801Z","6.1.4":"2019-12-31T10:48:20.399Z","6.1.5-test.1577880067604":"2020-01-01T12:01:22.524Z","6.1.5":"2020-01-01T12:04:42.731Z","6.1.6-test.1578573636594":"2020-01-09T12:40:52.371Z","6.1.6":"2020-01-09T12:44:17.926Z","6.1.11-test.1580388839321":"2020-01-30T12:54:16.507Z","6.1.11":"2020-01-30T12:57:42.869Z","6.1.12-test.1580497278140":"2020-01-31T19:01:34.757Z","6.1.12":"2020-01-31T19:05:13.631Z","6.1.13-test.1580507015125":"2020-01-31T21:43:51.988Z","6.1.13":"2020-01-31T21:47:08.863Z","6.2.0-test.1581605452512":"2020-02-13T14:51:09.221Z","6.2.0":"2020-02-13T14:54:36.518Z","6.3.0-test.1581860785440":"2020-02-16T13:46:42.927Z","6.3.0":"2020-02-16T13:50:32.286Z","6.3.1-test.1582196551623":"2020-02-20T11:02:48.440Z","6.3.1":"2020-02-20T11:06:49.478Z","6.3.3-test.1582724068354":"2020-02-26T13:34:45.994Z","6.3.3":"2020-02-26T13:38:41.378Z","6.3.4-test.1582724693767":"2020-02-26T13:45:10.135Z","6.3.4":"2020-02-26T13:48:54.986Z","6.3.5-test.1582749114198":"2020-02-26T20:32:12.452Z","6.3.5":"2020-02-26T20:35:59.493Z","6.3.6-test.1583839547381":"2020-03-10T11:26:04.775Z","6.3.6-test.1583854713634":"2020-03-10T15:38:49.720Z","6.3.6-test.1583877557990":"2020-03-10T21:59:36.128Z","6.3.6":"2020-03-10T22:03:19.560Z","6.3.8-test.1585742261800":"2020-04-01T11:58:05.535Z","6.3.8":"2020-04-01T12:03:30.324Z","6.3.9-test.1585766805439":"2020-04-01T18:47:09.479Z","6.3.9":"2020-04-01T18:52:46.062Z","6.3.10-test.1585824075674":"2020-04-02T10:41:39.298Z","6.3.10":"2020-04-02T10:47:32.187Z","6.3.11-test.1585824894102":"2020-04-02T10:55:17.701Z","6.3.11":"2020-04-02T11:00:46.660Z","6.3.12-test.1586033044563":"2020-04-04T20:44:28.196Z","6.3.12":"2020-04-04T20:49:50.495Z","6.3.13-test.1586511456255":"2020-04-10T09:37:59.585Z","6.3.13":"2020-04-10T09:43:23.818Z","6.4.0-test.1586530558932":"2020-04-10T14:56:21.797Z","6.4.1-test.1586532074169":"2020-04-10T15:21:38.849Z","6.4.1":"2020-04-10T15:26:54.089Z","6.4.2-test.1586553142361":"2020-04-10T21:12:46.509Z","6.4.2":"2020-04-10T21:17:55.146Z","6.5.0-test.1587133243422":"2020-04-17T14:21:09.396Z","6.5.0":"2020-04-17T14:26:40.369Z","6.5.1-test.1587231924920":"2020-04-18T17:45:50.288Z","6.5.1":"2020-04-18T17:51:21.913Z","6.6.2-test.1588431514660":"2020-05-02T14:58:53.764Z","6.6.2":"2020-05-02T15:04:00.071Z","6.7.1-test.1588969227099":"2020-05-08T20:20:49.357Z","6.7.2-test.1588969772826":"2020-05-08T20:29:55.584Z","6.7.2":"2020-05-08T20:35:08.448Z","6.7.3-test.1589194246214":"2020-05-11T10:51:08.851Z","6.7.3":"2020-05-11T10:56:14.186Z","6.7.4-test.1589217055201":"2020-05-11T17:11:18.688Z","6.7.4":"2020-05-11T17:16:52.927Z","6.7.5-test.1589451716304":"2020-05-14T10:22:18.695Z","6.7.5":"2020-05-14T10:27:41.169Z","6.7.7-test.1589494156477":"2020-05-14T22:09:40.109Z","6.7.7":"2020-05-14T22:15:10.620Z","6.8.0-test.1589797217341":"2020-05-18T10:20:39.312Z","6.8.0":"2020-05-18T10:25:55.476Z","6.8.1-test.1589831477687":"2020-05-18T19:51:40.214Z","6.8.1":"2020-05-18T19:56:58.530Z","6.8.2-test.1589833047836":"2020-05-18T20:17:51.677Z","6.8.2":"2020-05-18T20:23:14.861Z","6.8.4-test.1589836928515":"2020-05-18T21:22:31.515Z","6.8.4":"2020-05-18T21:27:54.253Z","6.8.5-test.1589890132231":"2020-05-19T12:09:16.371Z","6.8.5":"2020-05-19T12:14:35.275Z","6.8.6-test.1589923290882":"2020-05-19T21:21:56.912Z","6.8.6":"2020-05-19T21:27:28.280Z","6.8.7-test.1589924198747":"2020-05-19T21:37:01.119Z","6.8.8-test.1589924321578":"2020-05-19T21:39:03.366Z","6.8.7":"2020-05-19T21:42:16.027Z","6.8.8":"2020-05-19T21:44:20.041Z","6.8.9-test.1589927116865":"2020-05-19T22:25:38.574Z","6.8.9":"2020-05-19T22:30:52.921Z","6.9.0-test.1590092457605":"2020-05-21T20:21:20.495Z","6.9.0":"2020-05-21T20:26:39.095Z","6.9.3-test.1590444761405":"2020-05-25T22:13:01.231Z","6.9.4-test.1590444938413":"2020-05-25T22:15:58.135Z","6.9.3":"2020-05-25T22:18:03.170Z","6.9.4":"2020-05-25T22:21:02.195Z","7.0.0-test.1592428067604":"2020-06-17T21:08:07.817Z","7.0.0-test.1592471066483":"2020-06-18T09:04:46.551Z","7.0.1-test.1592471100026":"2020-06-18T09:05:19.668Z","6.9.7-test.1592471721140":"2020-06-18T09:15:40.785Z","6.9.7":"2020-06-18T09:20:44.600Z","7.0.2-test.1592476063059":"2020-06-18T10:28:02.797Z","6.9.8-test.1592477329982":"2020-06-18T10:49:11.113Z","6.9.8":"2020-06-18T10:54:22.301Z","6.9.9-test.1592480942079":"2020-06-18T11:49:22.413Z","6.9.9":"2020-06-18T11:54:29.783Z","6.10.0-test.1594209815818":"2020-07-08T12:04:05.484Z","6.10.0":"2020-07-08T12:09:27.222Z","6.10.1-test.1594214031908":"2020-07-08T13:14:11.131Z","6.10.1":"2020-07-08T13:19:04.283Z","6.10.2-test.1594287582179":"2020-07-09T09:40:02.285Z","6.10.2":"2020-07-09T09:44:47.636Z","6.10.4-test.1594303670274":"2020-07-09T14:08:11.514Z","6.10.5-test.1594306123351":"2020-07-09T14:49:04.445Z","6.10.5":"2020-07-09T14:50:44.527Z","6.10.6-test.1594306421818":"2020-07-09T14:54:02.219Z","6.10.6":"2020-07-09T14:55:41.912Z","6.10.7-test.1594307402767":"2020-07-09T15:10:23.582Z","6.10.7":"2020-07-09T15:12:04.648Z","6.10.8-test.1594310585957":"2020-07-09T16:03:27.601Z","6.10.8":"2020-07-09T16:08:36.825Z","6.10.9-test.1594312222756":"2020-07-09T16:30:43.361Z","6.10.9":"2020-07-09T16:35:47.011Z","6.10.10-test.1594314500330":"2020-07-09T17:08:41.390Z","6.10.10":"2020-07-09T17:13:37.587Z","6.10.11-test.1594323150496":"2020-07-09T19:32:50.171Z","6.10.11":"2020-07-09T19:37:42.765Z","6.10.12-test.1594336752873":"2020-07-09T23:19:33.227Z","6.10.12":"2020-07-09T23:24:36.218Z","6.10.13-test.1594337552374":"2020-07-09T23:32:53.224Z","6.10.13":"2020-07-09T23:37:53.991Z","6.10.14-test.1594341179980":"2020-07-10T00:33:21.523Z","6.10.14":"2020-07-10T00:38:27.897Z","6.10.15-test.1594371399092":"2020-07-10T08:57:00.025Z","6.10.15":"2020-07-10T09:02:15.180Z","6.10.16-test.1594374932591":"2020-07-10T09:55:52.374Z","6.10.16":"2020-07-10T10:00:35.678Z","6.12.0-test.1594461437066":"2020-07-11T09:57:35.925Z","6.12.0":"2020-07-11T10:02:16.032Z","6.12.1-test.1594462197241":"2020-07-11T10:10:15.925Z","6.12.1":"2020-07-11T10:14:53.834Z","6.12.2-test.1594663634021":"2020-07-13T18:07:34.934Z","6.12.2":"2020-07-13T18:12:40.985Z","6.13.0-test.1594757628319":"2020-07-14T20:14:01.080Z","6.13.0":"2020-07-14T20:17:18.041Z","6.13.1-test.1594814230562":"2020-07-15T11:57:24.083Z","6.13.1":"2020-07-15T12:00:49.755Z","6.13.2-test.1594820144017":"2020-07-15T13:36:06.519Z","6.13.2":"2020-07-15T13:39:40.774Z","6.13.3-test.1594832770423":"2020-07-15T17:06:29.953Z","6.13.3":"2020-07-15T17:10:21.778Z","6.13.4-test.1594833294711":"2020-07-15T17:15:07.571Z","6.13.4":"2020-07-15T17:18:33.868Z","6.13.5-test.1594841518492":"2020-07-15T19:32:11.141Z","6.13.6-test.1594848698379":"2020-07-15T21:31:51.475Z","6.13.6":"2020-07-15T21:35:18.295Z","6.13.7-test.1594904316672":"2020-07-16T12:58:50.851Z","6.13.8-test.1594904910732":"2020-07-16T13:08:43.303Z","6.13.10-test.1594906276080":"2020-07-16T13:31:30.547Z","6.13.11-test.1594906424303":"2020-07-16T13:33:57.682Z","6.13.11":"2020-07-16T13:37:25.043Z","6.13.12-test.1595260759175":"2020-07-20T15:59:31.949Z","6.13.12":"2020-07-20T16:02:58.396Z","6.13.13-test.1595264322969":"2020-07-20T16:58:55.786Z","6.13.13":"2020-07-20T17:02:20.190Z","6.13.14-test.1595266853397":"2020-07-20T17:41:08.080Z","6.13.14":"2020-07-20T17:44:36.512Z","6.13.15-test.1595267799681":"2020-07-20T17:56:52.870Z","6.13.15":"2020-07-20T18:00:14.512Z","6.13.16-test.1595337622689":"2020-07-21T13:20:35.649Z","6.13.16":"2020-07-21T13:24:02.762Z","6.13.17-test.1595341460555":"2020-07-21T14:24:34.642Z","6.13.17":"2020-07-21T14:28:11.515Z","6.13.19-test.1595344044898":"2020-07-21T15:07:38.397Z","6.13.19":"2020-07-21T15:11:05.091Z","6.13.20-test.1595370466255":"2020-07-21T22:28:04.788Z","6.13.21-test.1595373209931":"2020-07-21T23:13:42.600Z","6.13.21":"2020-07-21T23:17:06.427Z","6.13.23-test.1595538244428":"2020-07-23T21:04:17.810Z","6.13.24-test.1595539145548":"2020-07-23T21:19:19.154Z","6.13.24":"2020-07-23T21:22:51.713Z","6.13.25-test.1595590191540":"2020-07-24T11:30:05.331Z","6.13.26-test.1595591045487":"2020-07-24T11:44:20.685Z","6.13.27-test.1595602929680":"2020-07-24T15:02:23.578Z","6.13.27":"2020-07-24T15:03:53.443Z","6.13.28-test.1595611281976":"2020-07-24T17:21:36.817Z","6.13.28":"2020-07-24T17:23:00.548Z","6.13.29-test.1595783480057":"2020-07-26T17:11:33.952Z","6.13.29":"2020-07-26T17:12:54.315Z","6.13.30-test.1595784120558":"2020-07-26T17:22:14.018Z","6.13.31-test.1595785129829":"2020-07-26T17:39:03.354Z","6.13.32-test.1595785242800":"2020-07-26T17:40:56.914Z","6.13.31":"2020-07-26T17:42:29.623Z","6.13.32":"2020-07-26T17:44:26.588Z","6.13.32-test.1595792808059":"2020-07-26T19:47:01.183Z","6.13.33-test.1595795486392":"2020-07-26T20:31:38.976Z","6.13.33":"2020-07-26T20:34:56.184Z","6.13.34-test.1595867675822":"2020-07-27T16:34:50.487Z","6.13.34":"2020-07-27T16:38:31.425Z","6.13.35-test.1596042592847":"2020-07-29T17:10:06.406Z","6.13.35":"2020-07-29T17:13:32.381Z","6.13.36-test.1596136831844":"2020-07-30T19:20:44.226Z","6.13.36":"2020-07-30T19:25:46.796Z","6.13.37-test.1596192014295":"2020-07-31T10:40:28.464Z","6.13.37":"2020-07-31T10:44:15.715Z","6.13.38-test.1596397940034":"2020-08-02T19:52:33.167Z","6.13.38":"2020-08-02T19:56:09.644Z","6.13.39-test.1596402732352":"2020-08-02T21:12:25.013Z","6.13.39":"2020-08-02T21:15:56.325Z","6.14.0-test.1596636685709":"2020-08-05T14:11:39.564Z","6.14.0":"2020-08-05T14:15:01.731Z","6.15.0-test.1596637547371":"2020-08-05T14:26:00.385Z","6.15.0":"2020-08-05T14:29:30.555Z","6.15.1-test.1596924948884":"2020-08-08T22:16:02.121Z","6.15.1":"2020-08-08T22:19:26.893Z","6.15.2-test.1597138366289":"2020-08-11T09:33:00.044Z","6.15.2":"2020-08-11T09:36:28.699Z","6.15.3-test.1597150297770":"2020-08-11T12:51:51.724Z","6.15.3":"2020-08-11T12:55:32.588Z","6.15.4-test.1597186060009":"2020-08-11T22:47:54.061Z","6.15.4":"2020-08-11T22:51:20.821Z","6.15.5-test.1597333971616":"2020-08-13T15:53:05.114Z","6.15.5":"2020-08-13T15:56:28.298Z","7.0.7-test.1598198094424":"2020-08-23T15:55:07.210Z","8.0.1-test.1598221305258":"2020-08-23T22:21:59.384Z","8.0.2-test.1598221481550":"2020-08-23T22:24:54.872Z","8.0.2":"2020-08-23T22:26:16.896Z","8.0.3-test.1598221567052":"2020-08-23T22:26:34.312Z","8.0.3":"2020-08-23T22:27:58.724Z","8.0.4-test.1598738192590":"2020-08-29T21:56:46.721Z","8.0.4":"2020-08-29T21:58:10.536Z","8.0.4-test.1599909185897":"2020-09-12T11:13:19.160Z","8.0.5-test.1599909256966":"2020-09-12T11:14:29.443Z","8.0.5":"2020-09-12T11:15:55.555Z","8.0.6-test.1600123160967":"2020-09-14T22:39:33.811Z","8.0.6":"2020-09-14T22:41:22.448Z","8.3.0-test.1600355949508":"2020-09-17T15:19:27.728Z","8.3.0":"2020-09-17T15:20:57.801Z","8.4.0-test.1600902138726":"2020-09-23T23:02:32.882Z","8.4.0":"2020-09-23T23:03:54.857Z","8.0.7-test.1601987367174":"2020-10-06T12:29:40.413Z","8.0.7":"2020-10-06T12:31:03.291Z","9.1.6-test.1611974721747":"2021-01-30T02:45:35.681Z","9.1.6":"2021-01-30T02:46:58.131Z","9.1.7-test.1611976321736":"2021-01-30T03:12:15.919Z","9.1.7":"2021-01-30T03:13:39.828Z","9.2.0-test.1612239500053":"2021-02-02T04:18:35.209Z","9.2.0":"2021-02-02T04:20:11.240Z","9.3.0-test.1612279009178":"2021-02-02T15:17:04.895Z","9.3.0":"2021-02-02T15:18:36.872Z","9.3.1-test.1612289204883":"2021-02-02T18:06:59.064Z","9.3.1":"2021-02-02T18:14:04.649Z","9.3.2-test.1612295949635":"2021-02-02T19:59:24.685Z","9.3.2":"2021-02-02T20:00:46.999Z","9.3.3-test.1612296648142":"2021-02-02T20:11:02.620Z","9.3.3":"2021-02-02T20:12:31.857Z","9.3.4-test.1612811820544":"2021-02-08T19:17:16.141Z","9.3.4":"2021-02-08T19:18:57.852Z","9.3.5-test.1612812690709":"2021-02-08T19:31:45.844Z","9.3.5":"2021-02-08T19:33:31.996Z","9.3.6-test.1612813388212":"2021-02-08T19:43:23.272Z","9.3.6":"2021-02-08T19:44:49.705Z","9.3.7-test.1612816247761":"2021-02-08T20:31:02.826Z","9.3.7":"2021-02-08T20:32:30.313Z","9.3.8-test.1612821602557":"2021-02-08T22:00:18.256Z","9.3.8":"2021-02-08T22:01:45.075Z","9.3.9-test.1612821864161":"2021-02-08T22:04:38.344Z","9.3.9":"2021-02-08T22:06:11.338Z","9.3.10-test.1612828964611":"2021-02-09T00:02:58.736Z","9.3.10":"2021-02-09T00:04:21.263Z","9.3.11-test.1613256943525":"2021-02-13T22:55:59.128Z","9.3.11":"2021-02-13T22:57:20.402Z","9.3.12-test.1613430915381":"2021-02-15T23:15:29.639Z","9.3.12":"2021-02-15T23:16:54.215Z","9.3.12-test.1613688804167":"2021-02-18T22:53:40.084Z","9.5.0-test.1614542567864":"2021-02-28T20:03:03.368Z","9.5.1-test.1614542630442":"2021-02-28T20:04:05.034Z","9.5.1":"2021-02-28T20:05:45.110Z","9.5.0":"2021-02-28T20:12:56.596Z","9.5.2-test.1614597145842":"2021-03-01T11:12:40.678Z","9.5.2":"2021-03-01T11:14:34.152Z","9.5.3-test.1614727682067":"2021-03-02T23:28:16.785Z","9.5.3":"2021-03-02T23:29:50.073Z","9.5.3-test.1614866301683":"2021-03-04T13:58:36.459Z","9.5.4-test.1614866345270":"2021-03-04T13:59:21.464Z","9.5.4":"2021-03-04T14:00:56.322Z","9.5.5-test.1614896541538":"2021-03-04T22:22:36.363Z","9.5.5":"2021-03-04T22:24:00.433Z","9.5.6-test.1614898387551":"2021-03-04T22:53:22.552Z","9.5.6":"2021-03-04T22:54:56.291Z","9.5.7-test.1614905356046":"2021-03-05T00:49:31.802Z","9.5.7":"2021-03-05T00:50:55.672Z","9.5.8-test.1614976760638":"2021-03-05T20:39:36.065Z","9.5.8":"2021-03-05T20:41:05.782Z","9.5.9-test.1615046858023":"2021-03-06T16:07:53.217Z","9.5.9":"2021-03-06T16:09:21.583Z","9.5.10-test.1615048141230":"2021-03-06T16:29:16.209Z","9.5.10":"2021-03-06T16:31:16.808Z","9.5.11-test.1615378342109":"2021-03-10T12:12:36.740Z","9.5.12-test.1615378426296":"2021-03-10T12:14:00.919Z","9.5.12":"2021-03-10T12:15:34.568Z","9.5.13-test.1615391047592":"2021-03-10T15:44:22.898Z","9.5.13":"2021-03-10T15:46:07.700Z","9.6.0-test.1615391863903":"2021-03-10T15:57:59.089Z","9.6.0":"2021-03-10T16:00:01.529Z"},"maintainers":[{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"}],"description":"TypeScript's largest utility library","homepage":"https://github.com/millsp/ts-toolbelt","keywords":["safe","tools","types","typesafe","typescript"],"repository":{"type":"git","url":"git+https://github.com/millsp/ts-toolbelt.git"},"author":{"name":"Pierre-Antoine Mills","url":"https://github.com/millsp"},"bugs":{"url":"https://github.com/millsp/ts-toolbelt/issues"},"license":"Apache-2.0","readme":"<p align=\"center\">\n  <a href=\"https://github.com/millsp/ts-toolbelt\">\n    <img alt=\"banner\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/banner.svg\">\n  </a>\n  <h4 align=\"center\">TypeScript's largest utility library</h4>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/npm/v/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://travis-ci.org/millsp/ts-toolbelt\" >\n    <img src=\"https://img.shields.io/travis/millsp/ts-toolbelt.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/dm/ts-toolbelt.svg\">\n  </a>\n  <a href=\"https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript\">\n    <img alt=\"Language grade: JavaScript\" src=\"https://img.shields.io/lgtm/grade/javascript/g/millsp/ts-toolbelt.svg?logo=lgtm&logoWidth=-2\"/>\n  </a>\n  <a href=\"#\">\n    <img src=\"http://isitmaintained.com/badge/resolution/millsp/ts-toolbelt.svg\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link\" >\n    <img src=\"https://img.shields.io/gitter/room/ts-toolbelt/community.svg\">\n  </a>\n  <a href=\"http://makeapullrequest.com\" >\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\">\n  </a>\n  <a href=\"https://conventionalcommits.org\" >\n    <img src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-green.svg\">\n  </a>\n  <a href=\"https://github.com/millsp/ts-toolbelt/blob/master/CODE_OF_CONDUCT.md\" >\n    <img src=\"https://img.shields.io/badge/CoC-Contributor%20Covenant-green.svg\">\n  </a>\n  <a href=\"#\">\n    <img src=\"https://img.shields.io/npm/l/ts-toolbelt.svg\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://millsp.github.io/ts-toolbelt/\">📖 Documentation</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues?utf8=✓&q=is%3Aissue+label%3Aannouncement+sort%3Acreated-desc+\">📣 Announcements</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---bug-report.md\" alt=\"Bug Report\">🐞 Report Bug</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/issues/new?template=---feature-request.md\" alt=\"Request Feature\">🍩 Request Feature</a>\n  ·\n  <a href=\"https://github.com/millsp/ts-toolbelt/discussions/new\" alt=\"Ask Questions\">🤔 Ask Questions</a>\n</p>\n\n## About\n\n**ts-toolbelt** is the largest, and most tested type library available right\nnow, featuring **+200 utilities**. Our type collection packages some of the most\nadvanced mapped types, conditional types, and recursive types on the market.\n\n**Spend less time, build stronger**. Benefit from a wide range of generic type\nfunctions to achieve better type safety. \n\nWe work just like lodash, or ramda, but applied to the type system. Our mission\nis to provide you with simple ways to compute, change, and create types. We\nabstract all those complex type checks away for you. We provide a simple,\nreusable, and standard API to help you get more done with TypeScript.\n\n**ts-toolbelt** is a well organized package that can help you perform advanced\noperations on object types, union types, as well as function, and literal types.\nIt is carefully and coherently designed for building robust, flexible, and\ntype-safe software.\n\n<p align=\"center\">\n  <a href=\"https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts\">\n    <img alt=\"demo\" width=\"800\" title=\"ts-toolbelt\" src=\"https://raw.githubusercontent.com/millsp/ts-toolbelt/master/.github/demo.svg\">\n  </a>\n</p>\n\nWe are a community and a knowledge base. Everyone is welcome to ask questions\nabout types. If you are stuck or you misunderstand something, you came to the\nright place!. We welcome beginners and advanced developers to come take part.\n**Welcome!**\n\n## Getting Started\n\n### Prerequisites\n\n```sh\nnpm install typescript@^4.1.0 --save-dev\n```\n\nFor best results, add this to your `tsconfig.json`\n\n```ts\n{\n  \"compilerOptions\": {\n    // highly recommended (required by few utilities)\n    \"strictNullChecks\": true,\n\n    // this is optional, but enable whenever possible\n    \"strict\": true,\n\n    // this is the lowest supported standard library\n    \"lib\": [\"es2015\"],\n  }\n}\n```\n\n### Installation\n\n```sh\nnpm install ts-toolbelt --save\n```\n\n### Hello World\n\n```ts\nimport {Object} from \"ts-toolbelt\"\n// Check the docs below for more\n\n// Merge two `object` together\ntype merge = Object.Merge<{name: string}, {age?: number}>\n// {name: string, age?: number}\n\n// Make a field of an `object` optional\ntype optional = Object.Optional<{id: number, name: string}, \"name\">\n// {id: number, name?: string}\n```\n\nYou can [**level-up, and re-code this library from\nscratch**](https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab).\n\n## [Documentation ⤢](https://millsp.github.io/ts-toolbelt/)\n\n### Imports\n\nThe project is organized around TypeScript's main concepts:\n\n| **Any**    | **Boolean** | **Class**    | **Function** | **Iteration** | **List** |\n|------------|-------------|--------------|--------------|---------------|----------|\n| **Number** | **Object**  | **Object.P** | **String**   | **Union**     | **Test** |\n\n> **`TIP`** How to choose categories? Match your type with them.\n\nThere are many ways to import the types into your project:\n\n* **Explicit**\n  ```ts\n  import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from \"ts-toolbelt\"\n  ```\n\n* **Compact**\n  ```ts\n  import {A, B, C, F, I, L, N, O, S, U} from \"ts-toolbelt\"\n  ```\n\n* **Portable**\n  ```ts\n  import tb from \"ts-toolbelt\"\n  ```\n\nYou can also import our non-official API from the community:\n  ```ts\n  import {Community} from \"ts-toolbelt\"\n  ```\n\n> **`TIP`** The community API is for our community to publish useful types that\n> don't see fit in the standard API.\n\n### Utility Index\n\n|ANY|OBJECT|LIST|FUNCTION|STRING|UNION|CLASS|BOOLEAN|NUMBER|OBJECT.P|ITERATION|\n|---|---|---|---|---|---|---|---|---|---|---|\n|[Await](https://millsp.github.io/ts-toolbelt/modules/any_await.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/object_assign.html)|[Append](https://millsp.github.io/ts-toolbelt/modules/list_append.html)|[AutoPath](https://millsp.github.io/ts-toolbelt/modules/function_autopath.html)|[At](https://millsp.github.io/ts-toolbelt/modules/string_at.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/union_diff.html)|[Class](https://millsp.github.io/ts-toolbelt/modules/class_class.html)|[And](https://millsp.github.io/ts-toolbelt/modules/boolean_and.html)|[Absolute](https://millsp.github.io/ts-toolbelt/modules/number_absolute.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html)|[Iteration](https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html)|\n|[At](https://millsp.github.io/ts-toolbelt/modules/any_at.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/object_atleast.html)|[Assign](https://millsp.github.io/ts-toolbelt/modules/list_assign.html)|[Compose](https://millsp.github.io/ts-toolbelt/modules/function_compose.html)|[Join](https://millsp.github.io/ts-toolbelt/modules/string_join.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/union_exclude.html)|[Instance](https://millsp.github.io/ts-toolbelt/modules/class_instance.html)|[Not](https://millsp.github.io/ts-toolbelt/modules/boolean_not.html)|[Add](https://millsp.github.io/ts-toolbelt/modules/number_add.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html)|[IterationOf](https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html)|\n|[Cast](https://millsp.github.io/ts-toolbelt/modules/any_cast.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html)|[AtLeast](https://millsp.github.io/ts-toolbelt/modules/list_atleast.html)|[Curry](https://millsp.github.io/ts-toolbelt/modules/function_curry.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/string_length.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/union_filter.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/class_parameters.html)|[Or](https://millsp.github.io/ts-toolbelt/modules/boolean_or.html)|[Greater](https://millsp.github.io/ts-toolbelt/modules/number_greater.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html)|[Key](https://millsp.github.io/ts-toolbelt/modules/iteration_key.html)|\n|[Compute](https://millsp.github.io/ts-toolbelt/modules/any_compute.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html)|[Compulsory](https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html)|[Exact](https://millsp.github.io/ts-toolbelt/modules/function_exact.html)|[Replace](https://millsp.github.io/ts-toolbelt/modules/string_replace.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/union_has.html)||[Xor](https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html)|[GreaterEq](https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html)|[Next](https://millsp.github.io/ts-toolbelt/modules/iteration_next.html)|\n|[Contains](https://millsp.github.io/ts-toolbelt/modules/any_contains.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/object_diff.html)|[CompulsoryKeys](https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html)|[Function](https://millsp.github.io/ts-toolbelt/modules/function_function.html)|[Split](https://millsp.github.io/ts-toolbelt/modules/string_split.html)|[IntersectOf](https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html)|||[IsNegative](https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html)|[Update](https://millsp.github.io/ts-toolbelt/modules/object_p_update.html)|[Pos](https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html)|\n|[Equals](https://millsp.github.io/ts-toolbelt/modules/any_equals.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/object_either.html)|[Concat](https://millsp.github.io/ts-toolbelt/modules/list_concat.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/function_length.html)||[Last](https://millsp.github.io/ts-toolbelt/modules/union_last.html)|||[IsPositive](https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html)|[Record](https://millsp.github.io/ts-toolbelt/modules/object_p_record.html)|[Prev](https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html)|\n|[Extends](https://millsp.github.io/ts-toolbelt/modules/any_extends.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/object_exclude.html)|[Diff](https://millsp.github.io/ts-toolbelt/modules/list_diff.html)|[Narrow](https://millsp.github.io/ts-toolbelt/modules/function_narrow.html)||[Merge](https://millsp.github.io/ts-toolbelt/modules/union_merge.html)|||[IsZero](https://millsp.github.io/ts-toolbelt/modules/number_iszero.html)|||\n|[Key](https://millsp.github.io/ts-toolbelt/modules/any_key.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html)|[Drop](https://millsp.github.io/ts-toolbelt/modules/list_drop.html)|[NoInfer](https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html)||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html)|||[Lower](https://millsp.github.io/ts-toolbelt/modules/number_lower.html)|||\n|[Keys](https://millsp.github.io/ts-toolbelt/modules/any_keys.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/object_filter.html)|[Either](https://millsp.github.io/ts-toolbelt/modules/list_either.html)|[Parameters](https://millsp.github.io/ts-toolbelt/modules/function_parameters.html)||[Nullable](https://millsp.github.io/ts-toolbelt/modules/union_nullable.html)|||[LowerEq](https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html)|||\n|[KnownKeys](https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html)|[Exclude](https://millsp.github.io/ts-toolbelt/modules/list_exclude.html)|[Pipe](https://millsp.github.io/ts-toolbelt/modules/function_pipe.html)||[Pop](https://millsp.github.io/ts-toolbelt/modules/union_pop.html)|||[Negate](https://millsp.github.io/ts-toolbelt/modules/number_negate.html)|||\n|[Is](https://millsp.github.io/ts-toolbelt/modules/any_is.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/object_has.html)|[ExcludeKeys](https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html)|[Promisify](https://millsp.github.io/ts-toolbelt/modules/function_promisify.html)||[Replace](https://millsp.github.io/ts-toolbelt/modules/union_replace.html)|||[Range](https://millsp.github.io/ts-toolbelt/modules/number_range.html)|||\n|[Promise](https://millsp.github.io/ts-toolbelt/modules/any_promise.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/object_haspath.html)|[Extract](https://millsp.github.io/ts-toolbelt/modules/list_extract.html)|[Return](https://millsp.github.io/ts-toolbelt/modules/function_return.html)||[Select](https://millsp.github.io/ts-toolbelt/modules/union_select.html)|||[Sub](https://millsp.github.io/ts-toolbelt/modules/number_sub.html)|||\n|[Try](https://millsp.github.io/ts-toolbelt/modules/any_try.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/object_includes.html)|[Filter](https://millsp.github.io/ts-toolbelt/modules/list_filter.html)|[UnCurry](https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html)||[Strict](https://millsp.github.io/ts-toolbelt/modules/union_strict.html)||||||\n|[Type](https://millsp.github.io/ts-toolbelt/modules/any_type.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/object_intersect.html)|[FilterKeys](https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html)|[ValidPath](https://millsp.github.io/ts-toolbelt/modules/function_validpath.html)||[ListOf](https://millsp.github.io/ts-toolbelt/modules/union_listof.html)||||||\n|[x](https://millsp.github.io/ts-toolbelt/modules/any_x.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html)|[Flatten](https://millsp.github.io/ts-toolbelt/modules/list_flatten.html)|||||||||\n||[Invert](https://millsp.github.io/ts-toolbelt/modules/object_invert.html)|[Group](https://millsp.github.io/ts-toolbelt/modules/list_group.html)|||||||||\n||[ListOf](https://millsp.github.io/ts-toolbelt/modules/object_listof.html)|[Has](https://millsp.github.io/ts-toolbelt/modules/list_has.html)|||||||||\n||[Merge](https://millsp.github.io/ts-toolbelt/modules/object_merge.html)|[HasPath](https://millsp.github.io/ts-toolbelt/modules/list_haspath.html)|||||||||\n||[MergeAll](https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html)|[Head](https://millsp.github.io/ts-toolbelt/modules/list_head.html)|||||||||\n||[Modify](https://millsp.github.io/ts-toolbelt/modules/object_modify.html)|[Includes](https://millsp.github.io/ts-toolbelt/modules/list_includes.html)|||||||||\n||[NonNullable](https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html)|[Intersect](https://millsp.github.io/ts-toolbelt/modules/list_intersect.html)|||||||||\n||[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html)|[IntersectKeys](https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html)|||||||||\n||[Nullable](https://millsp.github.io/ts-toolbelt/modules/object_nullable.html)|[KeySet](https://millsp.github.io/ts-toolbelt/modules/list_keyset.html)|||||||||\n||[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html)|[Last](https://millsp.github.io/ts-toolbelt/modules/list_last.html)|||||||||\n||[Object](https://millsp.github.io/ts-toolbelt/modules/object_object.html)|[LastKey](https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html)|||||||||\n||[Omit](https://millsp.github.io/ts-toolbelt/modules/object_omit.html)|[Length](https://millsp.github.io/ts-toolbelt/modules/list_length.html)|||||||||\n||[Optional](https://millsp.github.io/ts-toolbelt/modules/object_optional.html)|[List](https://millsp.github.io/ts-toolbelt/modules/list_list.html)|||||||||\n||[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html)|[Longest](https://millsp.github.io/ts-toolbelt/modules/list_longest.html)|||||||||\n||[Overwrite](https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html)|[Merge](https://millsp.github.io/ts-toolbelt/modules/list_merge.html)|||||||||\n||[Partial](https://millsp.github.io/ts-toolbelt/modules/object_partial.html)|[MergeAll](https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html)|||||||||\n||[Patch](https://millsp.github.io/ts-toolbelt/modules/object_patch.html)|[Modify](https://millsp.github.io/ts-toolbelt/modules/list_modify.html)|||||||||\n||[PatchAll](https://millsp.github.io/ts-toolbelt/modules/object_patchall.html)|[NonNullable](https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html)|||||||||\n||[Path](https://millsp.github.io/ts-toolbelt/modules/object_path.html)|[NonNullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html)|||||||||\n||[Paths](https://millsp.github.io/ts-toolbelt/modules/object_paths.html)|[Nullable](https://millsp.github.io/ts-toolbelt/modules/list_nullable.html)|||||||||\n||[Pick](https://millsp.github.io/ts-toolbelt/modules/object_pick.html)|[NullableKeys](https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html)|||||||||\n||[Readonly](https://millsp.github.io/ts-toolbelt/modules/object_readonly.html)|[ObjectOf](https://millsp.github.io/ts-toolbelt/modules/list_objectof.html)|||||||||\n||[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html)|[Omit](https://millsp.github.io/ts-toolbelt/modules/list_omit.html)|||||||||\n||[Record](https://millsp.github.io/ts-toolbelt/modules/object_record.html)|[Optional](https://millsp.github.io/ts-toolbelt/modules/list_optional.html)|||||||||\n||[Replace](https://millsp.github.io/ts-toolbelt/modules/object_replace.html)|[OptionalKeys](https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html)|||||||||\n||[Required](https://millsp.github.io/ts-toolbelt/modules/object_required.html)|[Overwrite](https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html)|||||||||\n||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html)|[Partial](https://millsp.github.io/ts-toolbelt/modules/list_partial.html)|||||||||\n||[Select](https://millsp.github.io/ts-toolbelt/modules/object_select.html)|[Patch](https://millsp.github.io/ts-toolbelt/modules/list_patch.html)|||||||||\n||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html)|[PatchAll](https://millsp.github.io/ts-toolbelt/modules/list_patchall.html)|||||||||\n||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html)|[Path](https://millsp.github.io/ts-toolbelt/modules/list_path.html)|||||||||\n||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html)|[Paths](https://millsp.github.io/ts-toolbelt/modules/list_paths.html)|||||||||\n||[Unionize](https://millsp.github.io/ts-toolbelt/modules/object_unionize.html)|[Pick](https://millsp.github.io/ts-toolbelt/modules/list_pick.html)|||||||||\n||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/object_unionof.html)|[Pop](https://millsp.github.io/ts-toolbelt/modules/list_pop.html)|||||||||\n||[Update](https://millsp.github.io/ts-toolbelt/modules/object_update.html)|[Prepend](https://millsp.github.io/ts-toolbelt/modules/list_prepend.html)|||||||||\n||[Writable](https://millsp.github.io/ts-toolbelt/modules/object_writable.html)|[Readonly](https://millsp.github.io/ts-toolbelt/modules/list_readonly.html)|||||||||\n||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html)|[ReadonlyKeys](https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html)|||||||||\n|||[Remove](https://millsp.github.io/ts-toolbelt/modules/list_remove.html)|||||||||\n|||[Repeat](https://millsp.github.io/ts-toolbelt/modules/list_repeat.html)|||||||||\n|||[Replace](https://millsp.github.io/ts-toolbelt/modules/list_replace.html)|||||||||\n|||[Required](https://millsp.github.io/ts-toolbelt/modules/list_required.html)|||||||||\n|||[RequiredKeys](https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html)|||||||||\n|||[Reverse](https://millsp.github.io/ts-toolbelt/modules/list_reverse.html)|||||||||\n|||[Select](https://millsp.github.io/ts-toolbelt/modules/list_select.html)|||||||||\n|||[SelectKeys](https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html)|||||||||\n|||[Shortest](https://millsp.github.io/ts-toolbelt/modules/list_shortest.html)|||||||||\n|||[Tail](https://millsp.github.io/ts-toolbelt/modules/list_tail.html)|||||||||\n|||[Take](https://millsp.github.io/ts-toolbelt/modules/list_take.html)|||||||||\n|||[Undefinable](https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html)|||||||||\n|||[UndefinableKeys](https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html)|||||||||\n|||[Unionize](https://millsp.github.io/ts-toolbelt/modules/list_unionize.html)|||||||||\n|||[UnionOf](https://millsp.github.io/ts-toolbelt/modules/list_unionof.html)|||||||||\n|||[UnNest](https://millsp.github.io/ts-toolbelt/modules/list_unnest.html)|||||||||\n|||[Update](https://millsp.github.io/ts-toolbelt/modules/list_update.html)|||||||||\n|||[Writable](https://millsp.github.io/ts-toolbelt/modules/list_writable.html)|||||||||\n|||[WritableKeys](https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html)|||||||||\n|||[Zip](https://millsp.github.io/ts-toolbelt/modules/list_zip.html)|||||||||\n|||[ZipObj](https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html)|||||||||\n\n### [Archives ⤢](https://github.com/millsp/ts-toolbelt/tree/gh-pages)\n\n> **`EXAMPLE`** https://millsp.github.io/ts-toolbelt/4.2.1/\n\n## [Good to Know ⤢](https://github.com/millsp/ts-toolbelt/discussions/categories/q-a)\n\nIn this wiki, you will find some extra resources for your learning, and\nunderstanding.\n\n**Are you missing something?** Participate to the open-wiki by [posting your\nquestions](https://github.com/millsp/ts-toolbelt/discussions/new).\n\n## Running tests\n\n### For this project\n\nTo run the `lint` & `type` tests, simply run:\n\n```sh\nnpm test\n```\n\n### For your project\n\nWant to test your own types? Let's get started:\n\n```ts\nimport {Number, Test} from \"ts-toolbelt\"\n\nconst {checks, check} = Test\n\nchecks([\n    check<Number.Add<1, 30>, 31, Test.Pass>(),\n    check<Number.Add<5, -3>, 2,  Test.Pass>(),\n])\n```\n\n> **`TIP`** Place it in a file that won't be executed, it's just for TypeScript\n> to test types.\n\n### Continuous Integration\n\nThe releases are done with Travis CI in stages & whenever a branch or PR is\npushed:\n\n- Tests are run with `npm test`\n- Tests against\n  [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/)\n- Releases to npm@[branch-name]\n\n## Compatibility\n\nThe project is maintained to adapt to the constant [changes of\nTypeScript](https://github.com/Microsoft/TypeScript/wiki/Roadmap):\n\n| ts-toolbelt | typescript |\n|-------------|------------|\n| 9.x.x       | ^4.1.x     |\n\nMajor version numbers will upgrade whenever TypeScript had breaking changes. \n\nOtherwise, the release versions will naturally follow the semantic versioning.\n\n## What's next\n\n* Automated performance tests\n  ```sh\n  # performance is checked manually with \n  npx tsc --noEmit --extendedDiagnostics\n  ```\n\n* Need to write more examples\n\n## Related Projects\n\n| **Name**                                                       | **Intro**                                                                                |\n|----------------------------------------------------------------|------------------------------------------------------------------------------------------|\n| [`eledoc`](https://github.com/millsp/eledoc)                   | 🌒 A material dark theme for TypeDoc.                                                    |\n| [`material-candy`](https://github.com/millsp/material-candy)   | 🍬 A vscode theme to uplift your mood, stay happy and focused.                           |\n| [`utility-types`](https://github.com/piotrwitek)               | Collection of utility types, complementing TypeScript built-in mapped types and aliases. |\n\n## License\n\n[![FOSSA\nStatus](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpirix-gh%2Fts-toolbelt?ref=badge_large)\n","readmeFilename":"README.md","users":{"flumpus-dev":true,"shawspring":true}}